OSDN Git Service

add ipfs package
[bytom/vapor.git] / vendor / github.com / ipfs / go-ipfs-api / ipns.go
diff --git a/vendor/github.com/ipfs/go-ipfs-api/ipns.go b/vendor/github.com/ipfs/go-ipfs-api/ipns.go
new file mode 100644 (file)
index 0000000..7903096
--- /dev/null
@@ -0,0 +1,55 @@
+package shell
+
+import (
+       "context"
+       "time"
+)
+
+type PublishResponse struct {
+       Name  string `json:"name"`
+       Value string `json:"value"`
+}
+
+// Publish updates a mutable name to point to a given value
+func (s *Shell) Publish(node string, value string) error {
+       var pubResp PublishResponse
+       req := s.Request("name/publish")
+       if node != "" {
+               req.Arguments(node)
+       }
+       req.Arguments(value)
+
+       return req.Exec(context.Background(), &pubResp)
+}
+
+// PublishWithDetails is used for fine grained control over record publishing
+func (s *Shell) PublishWithDetails(contentHash, key string, lifetime, ttl time.Duration, resolve bool) (*PublishResponse, error) {
+       var pubResp PublishResponse
+       req := s.Request("name/publish", contentHash).Option("resolve", resolve)
+       if key != "" {
+               req.Option("key", key)
+       }
+       if lifetime != 0 {
+               req.Option("lifetime", lifetime)
+       }
+       if ttl.Seconds() > 0 {
+               req.Option("ttl", ttl)
+       }
+       err := req.Exec(context.Background(), &pubResp)
+       if err != nil {
+               return nil, err
+       }
+       return &pubResp, nil
+}
+
+// Resolve gets resolves the string provided to an /ipns/[name]. If asked to
+// resolve an empty string, resolve instead resolves the node's own /ipns value.
+func (s *Shell) Resolve(id string) (string, error) {
+       req := s.Request("name/resolve")
+       if id != "" {
+               req.Arguments(id)
+       }
+       var out struct{ Path string }
+       err := req.Exec(context.Background(), &out)
+       return out.Path, err
+}