itd/api/api.go

63 lines
1.2 KiB
Go
Raw Normal View History

2022-04-23 00:12:30 +00:00
package api
import (
"io"
"net"
2022-04-23 00:12:30 +00:00
"go.arsenm.dev/drpc/muxconn"
2023-01-03 06:30:17 +00:00
"go.arsenm.dev/itd/internal/rpc"
"storj.io/drpc"
2022-04-23 00:12:30 +00:00
)
const DefaultAddr = "/tmp/itd/socket"
2023-01-03 17:30:04 +00:00
// Client is a client for ITD's socket API
2022-04-23 00:12:30 +00:00
type Client struct {
conn drpc.Conn
2023-01-03 06:30:17 +00:00
client rpc.DRPCITDClient
2022-04-23 00:12:30 +00:00
}
2023-01-03 17:30:04 +00:00
// New connects to the UNIX socket at the given
// path, and returns a client that communicates
// with that socket.
2022-04-23 00:12:30 +00:00
func New(sockPath string) (*Client, error) {
conn, err := net.Dial("unix", sockPath)
2022-04-23 00:12:30 +00:00
if err != nil {
return nil, err
}
mconn, err := muxconn.New(conn)
if err != nil {
return nil, err
}
2022-04-23 00:12:30 +00:00
2023-01-03 06:30:17 +00:00
return &Client{
conn: mconn,
client: rpc.NewDRPCITDClient(mconn),
2023-01-03 06:30:17 +00:00
}, nil
2022-04-23 00:12:30 +00:00
}
2023-01-03 17:30:04 +00:00
// NewFromConn returns a client that communicates
// over the given connection.
func NewFromConn(conn io.ReadWriteCloser) (*Client, error) {
mconn, err := muxconn.New(conn)
if err != nil {
return nil, err
}
2023-01-03 06:30:17 +00:00
return &Client{
conn: mconn,
client: rpc.NewDRPCITDClient(mconn),
}, nil
}
2023-01-03 17:30:04 +00:00
// FS returns the filesystem API client
2023-01-03 06:30:17 +00:00
func (c *Client) FS() *FSClient {
return &FSClient{rpc.NewDRPCFSClient(c.conn)}
}
2023-01-03 17:30:04 +00:00
// Close closes the client connection
2022-04-23 00:12:30 +00:00
func (c *Client) Close() error {
2023-01-03 06:30:17 +00:00
return c.conn.Close()
2022-04-23 00:12:30 +00:00
}