Skip to content

Commit 58c7545

Browse files
committed
feat: list response type
1 parent 1db6166 commit 58c7545

File tree

5 files changed

+42
-23
lines changed

5 files changed

+42
-23
lines changed

crates/json_http/src/route/frontmatter_list.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,14 @@ fn get_inner(
3636
.transpose()
3737
.map_err(|_| StatusCode::BAD_REQUEST)?;
3838

39-
let files = custard_lib::list::get(
39+
let response = custard_lib::list::get(
4040
keeper,
4141
custard_lib::list::Get::new(sort_key, order_desc, offset, limit),
4242
);
4343

44-
let headers = assign_headers(files.len());
44+
let headers = assign_headers(response.total);
4545

46-
Ok((headers, files))
46+
Ok((headers, response.files))
4747
}
4848

4949
pub async fn get(
@@ -81,14 +81,14 @@ fn post_inner(
8181
.map_err(|_| StatusCode::BAD_REQUEST)?
8282
.unwrap_or_default();
8383

84-
let files = custard_lib::list::query(
84+
let response = custard_lib::list::query(
8585
keeper,
8686
custard_lib::list::Query::new(query, sort_key, order_desc, offset, limit, intersect),
8787
);
8888

89-
let headers = assign_headers(files.len());
89+
let headers = assign_headers(response.total);
9090

91-
Ok((headers, files))
91+
Ok((headers, response.files))
9292
}
9393

9494
pub async fn post(

crates/lib/src/list.rs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use serde::Deserialize;
1+
use serde::{Deserialize, Serialize};
22

33
use crate::frontmatter_file::{self, Keeper, Short};
44
use crate::frontmatter_query::FrontmatterQuery;
@@ -59,13 +59,23 @@ impl<'a> Get<'a> {
5959
}
6060
}
6161

62+
#[derive(Serialize, Debug)]
63+
pub struct Response {
64+
pub files: Vec<frontmatter_file::Short>,
65+
pub total: usize,
66+
}
67+
6268
#[allow(clippy::needless_pass_by_value)]
63-
pub fn get(keeper: &Keeper, args: Get<'_>) -> Vec<frontmatter_file::Short> {
69+
pub fn get(keeper: &Keeper, args: Get<'_>) -> Response {
6470
let mut files = keeper.files().cloned().map(Short::from).collect::<Vec<_>>();
6571

72+
let total = files.len();
73+
6674
sort_with_params(args.sort_key, args.order_desc, &mut files);
6775

68-
paginate(files, args.offset, args.limit)
76+
let files = paginate(files, args.offset, args.limit);
77+
78+
Response { files, total }
6979
}
7080

7181
#[derive(Deserialize)]
@@ -106,14 +116,18 @@ impl<'a> Query<'a> {
106116
}
107117

108118
#[must_use]
109-
pub fn query(keeper: &Keeper, args: Query<'_>) -> Vec<frontmatter_file::Short> {
119+
pub fn query(keeper: &Keeper, args: Query<'_>) -> Response {
110120
let files = keeper.files();
111121

122+
let total = files.len();
123+
112124
let mut filtered_files = query_files(files, args.query, None, args.intersect)
113125
.map(|file| file.clone().into())
114126
.collect::<Vec<_>>();
115127

116128
sort_with_params(args.sort_key, args.order_desc, &mut filtered_files);
117129

118-
paginate(filtered_files, args.offset, args.limit)
130+
let files = paginate(filtered_files, args.offset, args.limit);
131+
132+
Response { files, total }
119133
}

crates/sock/src/main.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ fn internal_server_error_bytes() -> Vec<u8> {
3030
#[serde(tag = "tag", content = "value")]
3131
enum Response<'a> {
3232
Single(Option<single::Response<'a>>),
33-
List(Vec<frontmatter_file::Short>),
33+
List(list::Response),
3434
Collate(Vec<String>),
3535
}
3636

@@ -100,9 +100,9 @@ fn in_buf_2_out_buf(markdown_files: &frontmatter_file::keeper::ArcMutex, in_buf:
100100

101101
let out_buf = match resp {
102102
Response::Single(response) => rmp_serde::to_vec(&Result::Ok(response)),
103-
Response::List(vec) => {
104-
debug!("Sending list of length: {}", vec.len());
105-
rmp_serde::to_vec(&Result::Ok(vec))
103+
Response::List(list) => {
104+
debug!("Sending list of length: {}", list.files.len());
105+
rmp_serde::to_vec(&Result::Ok(list))
106106
}
107107
Response::Collate(vec) => rmp_serde::to_vec(&Result::Ok(vec)),
108108
};

go/client/sock/client.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,19 @@ type SingleResponse struct {
7171
NextFileName string `msgpack:"next_file_name"`
7272
}
7373

74-
type ListResponse struct {
74+
type ShortResponse struct {
7575
Name string `msgpack:"name"`
7676
Frontmatter map[string]any `msgpack:"frontmatter,omitempty"`
7777
OneLiner string `msgpack:"one_liner,omitempty"`
7878
Modified string `msgpack:"modified"`
7979
Created string `msgpack:"created"`
8080
}
8181

82+
type ListResponse struct {
83+
Files []ShortResponse `msgpack:"files"`
84+
Total uint `msgpack:"total"`
85+
}
86+
8287
type Client struct {
8388
socketPath string
8489
}
@@ -90,7 +95,7 @@ func NewClient(socketPath string) *Client {
9095
return &c
9196
}
9297

93-
func (c *Client) runListRequest(listReq any, tag string) ([]ListResponse, error) {
98+
func (c *Client) runListRequest(listReq any, tag string) (*ListResponse, error) {
9499
conn, err := net.Dial("unix", c.socketPath)
95100
if err != nil {
96101
return nil, fmt.Errorf("Failed to dial: %w", err)
@@ -115,12 +120,12 @@ func (c *Client) runListRequest(listReq any, tag string) ([]ListResponse, error)
115120

116121
switch resp.Tag {
117122
case "Ok":
118-
var listResp []ListResponse
123+
var listResp ListResponse
119124
err := msgpack.Unmarshal(resp.Value, &listResp)
120125
if err != nil {
121126
return nil, fmt.Errorf("Could not unmarshal response value: %w", err)
122127
}
123-
return listResp, nil
128+
return &listResp, nil
124129
case "InternalServerError":
125130
return nil, fmt.Errorf("Custard had internal server error")
126131
default:
@@ -215,11 +220,11 @@ func (c *Client) QuerySingle(req QuerySingleRequest) (*SingleResponse, error) {
215220
return c.runSingleRequest(req, "SingleQuery")
216221
}
217222

218-
func (c *Client) GetList(req GetListRequest) ([]ListResponse, error) {
223+
func (c *Client) GetList(req GetListRequest) (*ListResponse, error) {
219224
return c.runListRequest(req, "ListGet")
220225
}
221226

222-
func (c *Client) QueryList(req QueryListRequest) ([]ListResponse, error) {
227+
func (c *Client) QueryList(req QueryListRequest) (*ListResponse, error) {
223228
return c.runListRequest(req, "ListQuery")
224229
}
225230

go/client/sock/test/client_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ func TestGetList(t *testing.T) {
8585
if err != nil {
8686
t.Fatalf("Request failed: %s", err)
8787
}
88-
respLen := len(resp)
88+
respLen := len(resp.Files)
8989
if respLen != 3 {
9090
t.Fatalf("Unexpected response length: %d", respLen)
9191
}
@@ -99,7 +99,7 @@ func TestQueryList(t *testing.T) {
9999
if err != nil {
100100
t.Fatalf("Request failed: %s", err)
101101
}
102-
respLen := len(resp)
102+
respLen := len(resp.Files)
103103
if respLen != 5 {
104104
t.Fatalf("Unexpected response length: %d", respLen)
105105
}

0 commit comments

Comments
 (0)