@@ -47,6 +47,16 @@ type QueryListRequest struct {
4747 Intersect bool `msgpack:"intersect,omitempty"`
4848}
4949
50+ type GetCollateRequest struct {
51+ Key string `msgpack:"key,omitempty"`
52+ }
53+
54+ type QueryCollateRequest struct {
55+ Query map [string ]any `msgpack:"query"`
56+ Key string `msgpack:"key,omitempty"`
57+ Intersect bool `msgpack:"intersect,omitempty"`
58+ }
59+
5060type singleResponse struct {
5161 File any `msgpack:"file"`
5262 PrevFileName string `msgpack:"prev_file_name"`
@@ -151,6 +161,44 @@ func (c *Client) runSingleRequest(singleReq any, tag string) (*singleResponse, e
151161 }
152162}
153163
164+ func (c * Client ) runCollateRequest (collateReq any , tag string ) ([]string , error ) {
165+ conn , err := net .Dial ("unix" , c .socketPath )
166+ if err != nil {
167+ return nil , fmt .Errorf ("Failed to dial: %w" , err )
168+ }
169+ defer conn .Close ()
170+
171+ req := taggedRequest {
172+ Tag : tag ,
173+ Value : collateReq ,
174+ }
175+
176+ enc := msgpack .NewEncoder (conn )
177+ if err := enc .Encode (req ); err != nil {
178+ return nil , fmt .Errorf ("Failed to encode request: %w" , err )
179+ }
180+
181+ var resp * taggedResponse
182+ dec := msgpack .NewDecoder (conn )
183+ if err := dec .Decode (& resp ); err != nil {
184+ return nil , fmt .Errorf ("Failed to decode response: %w" , err )
185+ }
186+
187+ switch resp .Tag {
188+ case "Ok" :
189+ var collateResp []string
190+ err := msgpack .Unmarshal (resp .Value , & collateResp )
191+ if err != nil {
192+ return nil , fmt .Errorf ("Could not unmarshal response value: %w" , err )
193+ }
194+ return collateResp , nil
195+ case "InternalServerError" :
196+ return nil , fmt .Errorf ("Custard had internal server error" )
197+ default :
198+ return nil , fmt .Errorf ("Unrecognised tag from server: %s" , resp .Tag )
199+ }
200+ }
201+
154202func (c * Client ) GetSingle (req GetSingleRequest ) (* singleResponse , error ) {
155203 return c .runSingleRequest (req , "SingleGet" )
156204}
@@ -166,3 +214,11 @@ func (c *Client) GetList(req GetListRequest) ([]listResponse, error) {
166214func (c * Client ) QueryList (req QueryListRequest ) ([]listResponse , error ) {
167215 return c .runListRequest (req , "ListQuery" )
168216}
217+
218+ func (c * Client ) GetCollate (req GetCollateRequest ) ([]string , error ) {
219+ return c .runCollateRequest (req , "CollateGet" )
220+ }
221+
222+ func (c * Client ) QueryCollate (req QueryCollateRequest ) ([]string , error ) {
223+ return c .runCollateRequest (req , "CollateQuery" )
224+ }
0 commit comments