commit 825c0b5de9a56096a364e94ee499ed241fc21bd0
parent a82c7920022ddc0ecd89da50152f1d1383f91511
Author: Matsuda Kenji <info@mtkn.jp>
Date: Thu, 12 Oct 2023 17:57:52 +0900
change API
Diffstat:
| M | client.go | | | 165 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------- |
1 file changed, 143 insertions(+), 22 deletions(-)
diff --git a/client.go b/client.go
@@ -205,48 +205,169 @@ func (c *Client) Auth(ctx context.Context, afid uint32, uname, aname string) (Qi
}
}
-func (c *Client) Attach(ctx context.Context, fid, afid uint32, uname, aname string) (Msg, error) {
+func (c *Client) Attach(ctx context.Context, fid, afid uint32, uname, aname string) (Qid, error) {
tmsg := &TAttach{fid: fid, afid: afid, uname: uname, aname: aname}
- return c.transact(ctx, tmsg)
+ rmsg, err := c.transact(ctx, tmsg)
+ if err != nil {
+ return Qid{}, fmt.Errorf("transact: %v", err)
+ }
+ switch rmsg := rmsg.(type) {
+ case *RAttach:
+ return rmsg.qid, nil
+ case *RError:
+ return Qid{}, rmsg.ename
+ default:
+ return Qid{}, fmt.Errorf("invalid reply: %v", rmsg)
+ }
}
-func (c *Client) Flush(ctx context.Context, oldtag uint16) (Msg, error) {
+func (c *Client) Flush(ctx context.Context, oldtag uint16) error {
tmsg := &TFlush{oldtag: oldtag}
- return c.transact(ctx, tmsg)
+ rmsg, err := c.transact(ctx, tmsg)
+ if err != nil {
+ return fmt.Errorf("transact: %v", err)
+ }
+ switch rmsg := rmsg.(type) {
+ case *RFlush:
+ return nil
+ case *RError:
+ return rmsg.ename
+ default:
+ return fmt.Errorf("invalid reply: %v", rmsg)
+ }
}
-func (c *Client) Walk(ctx context.Context, fid, newFid uint32, wname []string) (Msg, error) {
+func (c *Client) Walk(ctx context.Context, fid, newFid uint32, wname []string) (wqid []Qid, err error) {
tmsg := &TWalk{fid: fid, newFid: newFid, wname: wname}
- return c.transact(ctx, tmsg)
+ rmsg, err := c.transact(ctx, tmsg)
+ if err != nil {
+ return nil, fmt.Errorf("transact: %v", err)
+ }
+ switch rmsg := rmsg.(type) {
+ case *RWalk:
+ return rmsg.qid, nil
+ case *RError:
+ return nil, rmsg.ename
+ default:
+ return nil, fmt.Errorf("invalid reply: %v", rmsg)
+ }
}
-func (c *Client) Open(ctx context.Context, fid uint32, mode OpenMode) (Msg, error) {
+func (c *Client) Open(ctx context.Context, fid uint32, mode OpenMode) (Qid, uint32, error) {
tmsg := &TOpen{fid: fid, mode: mode}
- return c.transact(ctx, tmsg)
+ rmsg, err := c.transact(ctx, tmsg)
+ if err != nil {
+ return Qid{}, 0, fmt.Errorf("transact: %v", err)
+ }
+ switch rmsg := rmsg.(type) {
+ case *ROpen:
+ return rmsg.qid, rmsg.iounit, nil
+ case *RError:
+ return Qid{}, 0, rmsg.ename
+ default:
+ return Qid{}, 0, fmt.Errorf("invalid reply: %v", rmsg)
+ }
}
-func (c *Client) Create(ctx context.Context, fid uint32, name string, perm FileMode, mode OpenMode) (Msg, error) {
+func (c *Client) Create(ctx context.Context, fid uint32, name string, perm FileMode, mode OpenMode) (Qid, uint32, error) {
tmsg := &TCreate{fid: fid, name: name, perm: perm, mode: mode}
- return c.transact(ctx, tmsg)
+ rmsg, err := c.transact(ctx, tmsg)
+ if err != nil {
+ return Qid{}, 0, fmt.Errorf("transact: %v", err)
+ }
+ switch rmsg := rmsg.(type) {
+ case *RCreate:
+ return rmsg.qid, rmsg.iounit, nil
+ case *RError:
+ return Qid{}, 0, rmsg.ename
+ default:
+ return Qid{}, 0, fmt.Errorf("invalid reply: %v", rmsg)
+ }
}
-func (c *Client) Read(ctx context.Context, fid uint32, offset uint64, count uint32) (Msg, error) {
+func (c *Client) Read(ctx context.Context, fid uint32, offset uint64, count uint32) (data []byte, err error) {
tmsg := &TRead{fid: fid, offset: offset, count: count}
- return c.transact(ctx, tmsg)
+ rmsg, err := c.transact(ctx, tmsg)
+ if err != nil {
+ return nil, fmt.Errorf("transact: %v", err)
+ }
+ switch rmsg := rmsg.(type) {
+ case *RRead:
+ return rmsg.data, nil
+ case *RError:
+ return nil, rmsg.ename
+ default:
+ return nil, fmt.Errorf("invalid reply: %v", rmsg)
+ }
}
-func (c *Client) Write(ctx context.Context, fid uint32, offset uint64, count uint32, data []byte) (Msg, error) {
+func (c *Client) Write(ctx context.Context, fid uint32, offset uint64, count uint32, data []byte) (uint32, error) {
tmsg := &TWrite{fid: fid, offset: offset, count: count, data: data}
- return c.transact(ctx, tmsg)
+ rmsg, err := c.transact(ctx, tmsg)
+ if err != nil {
+ return 0, fmt.Errorf("transact: %v", err)
+ }
+ switch rmsg := rmsg.(type) {
+ case *RWrite:
+ return rmsg.count, nil
+ case *RError:
+ return 0, rmsg.ename
+ default:
+ return 0, fmt.Errorf("invalid reply: %v", rmsg)
+ }
}
-func (c *Client) Clunk(ctx context.Context, fid uint32) (Msg, error) {
+func (c *Client) Clunk(ctx context.Context, fid uint32) error {
tmsg := &TClunk{fid: fid}
- return c.transact(ctx, tmsg)
+ rmsg, err := c.transact(ctx, tmsg)
+ if err != nil {
+ return fmt.Errorf("transact: %v", err)
+ }
+ switch rmsg := rmsg.(type) {
+ case *RClunk:
+ return nil
+ case *RError:
+ return rmsg.ename
+ default:
+ return fmt.Errorf("invalid reply: %v", rmsg)
+ }
}
-func (c *Client) Remove(ctx context.Context, fid uint32) (Msg, error) {
+func (c *Client) Remove(ctx context.Context, fid uint32) error {
tmsg := &TRemove{fid: fid}
- return c.transact(ctx, tmsg)
+ rmsg, err := c.transact(ctx, tmsg)
+ if err != nil {
+ return fmt.Errorf("transact: %v", err)
+ }
+ switch rmsg := rmsg.(type) {
+ case *RRemove:
+ return nil
+ case *RError:
+ return rmsg.ename
+ default:
+ return fmt.Errorf("invalid reply: %v", rmsg)
+ }
}
-func (c *Client) Stat(ctx context.Context, fid uint32) (Msg, error) {
+func (c *Client) Stat(ctx context.Context, fid uint32) (*Stat, error) {
tmsg := &TStat{fid: fid}
- return c.transact(ctx, tmsg)
+ rmsg, err := c.transact(ctx, tmsg)
+ if err != nil {
+ return nil, fmt.Errorf("transact: %v", err)
+ }
+ switch rmsg := rmsg.(type) {
+ case *RStat:
+ return rmsg.stat, nil
+ case *RError:
+ return nil, rmsg.ename
+ default:
+ return nil, fmt.Errorf("invalid reply: %v", rmsg)
+ }
}
-func (c *Client) Wstat(ctx context.Context, fid uint32, stat *Stat) (Msg, error) {
+func (c *Client) Wstat(ctx context.Context, fid uint32, stat *Stat) error {
tmsg := &TWStat{fid: fid, stat: stat}
- return c.transact(ctx, tmsg)
+ rmsg, err := c.transact(ctx, tmsg)
+ if err != nil {
+ return fmt.Errorf("transact: %v", err)
+ }
+ switch rmsg := rmsg.(type) {
+ case *RWStat:
+ return nil
+ case *RError:
+ return rmsg.ename
+ default:
+ return fmt.Errorf("invalid reply: %v", rmsg)
+ }
}