sonic_channel2/commands/
count.rs1use super::StreamCommand;
2use crate::misc::*;
3use crate::protocol;
4use crate::result::*;
5
6#[derive(Debug)]
8pub struct CountRequest(OptDest);
9
10impl CountRequest {
11    pub fn buckets(collection: impl ToString) -> CountRequest {
13        Self(OptDest::col(collection))
14    }
15
16    pub fn objects(collection: impl ToString, bucket: impl ToString) -> CountRequest {
18        Self(OptDest::col_buc(collection, bucket))
19    }
20
21    pub fn words(
23        collection: impl ToString,
24        bucket: impl ToString,
25        object: impl ToString,
26    ) -> CountRequest {
27        Self(OptDest::col_buc_obj(collection, bucket, object))
28    }
29}
30
31impl From<Dest> for CountRequest {
32    fn from(d: Dest) -> Self {
33        Self(OptDest::from(d))
34    }
35}
36
37impl From<ObjDest> for CountRequest {
38    fn from(d: ObjDest) -> Self {
39        Self(OptDest::from(d))
40    }
41}
42
43#[derive(Debug)]
44pub struct CountCommand {
45    pub(crate) req: CountRequest,
46}
47
48impl StreamCommand for CountCommand {
49    type Response = usize;
50
51    fn request(&self) -> protocol::Request {
52        let dest = &self.req.0;
53        protocol::Request::Count {
54            collection: dest.collection.clone(),
55            bucket: dest.bucket.clone(),
56            object: dest.object.clone(),
57        }
58    }
59
60    fn receive(&self, res: protocol::Response) -> Result<Self::Response> {
61        if let protocol::Response::Result(count) = res {
62            Ok(count)
63        } else {
64            Err(Error::WrongResponse)
65        }
66    }
67}