iroh_rpc_types/
store.rs

1use std::fmt::{self, Debug};
2
3use bytes::Bytes;
4use cid::Cid;
5use derive_more::{From, TryInto};
6use quic_rpc::{
7    message::{Msg, RpcMsg, ServerStreaming},
8    Service,
9};
10use serde::{Deserialize, Serialize};
11
12use crate::{RpcResult, VersionRequest, VersionResponse, WatchRequest, WatchResponse};
13
14pub type StoreAddr = super::addr::Addr<StoreService>;
15
16#[derive(Serialize, Deserialize)]
17pub struct PutRequest {
18    pub cid: Cid,
19    pub blob: Bytes,
20    pub links: Vec<Cid>,
21}
22
23impl fmt::Debug for PutRequest {
24    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
25        f.debug_struct("PutRequest")
26            .field("cid", &self.cid)
27            .field("blob", &self.blob.len())
28            .field("links", &self.links)
29            .finish()
30    }
31}
32
33#[derive(Serialize, Deserialize, Debug)]
34pub struct PutManyRequest {
35    pub blocks: Vec<PutRequest>,
36}
37
38#[derive(Serialize, Deserialize, Debug)]
39pub struct GetRequest {
40    pub cid: Cid,
41}
42
43#[derive(Serialize, Deserialize, Debug)]
44pub struct GetResponse {
45    pub data: Option<Bytes>,
46}
47
48#[derive(Serialize, Deserialize, Debug)]
49pub struct HasRequest {
50    pub cid: Cid,
51}
52
53#[derive(Serialize, Deserialize, Debug)]
54pub struct HasResponse {
55    pub has: bool,
56}
57
58#[derive(Serialize, Deserialize, Debug)]
59pub struct GetLinksRequest {
60    pub cid: Cid,
61}
62
63#[derive(Serialize, Deserialize, Debug)]
64pub struct GetLinksResponse {
65    pub links: Option<Vec<Cid>>,
66}
67
68#[derive(Serialize, Deserialize, Debug)]
69pub struct GetSizeRequest {
70    pub cid: Cid,
71}
72
73#[derive(Serialize, Deserialize, Debug)]
74pub struct GetSizeResponse {
75    pub size: Option<u64>,
76}
77
78#[derive(Serialize, Deserialize, Debug, From, TryInto)]
79pub enum StoreRequest {
80    Watch(WatchRequest),
81    Version(VersionRequest),
82    Put(PutRequest),
83    PutMany(PutManyRequest),
84    Get(GetRequest),
85    Has(HasRequest),
86    GetLinks(GetLinksRequest),
87    GetSize(GetSizeRequest),
88}
89
90#[derive(Serialize, Deserialize, Debug, From, TryInto)]
91pub enum StoreResponse {
92    Watch(WatchResponse),
93    Version(VersionResponse),
94    Get(RpcResult<GetResponse>),
95    Has(RpcResult<HasResponse>),
96    GetLinks(RpcResult<GetLinksResponse>),
97    GetSize(RpcResult<GetSizeResponse>),
98    Unit(()),
99    UnitResult(RpcResult<()>),
100}
101
102#[derive(Debug, Clone, Copy)]
103pub struct StoreService;
104
105impl Service for StoreService {
106    type Req = StoreRequest;
107
108    type Res = StoreResponse;
109}
110
111impl Msg<StoreService> for WatchRequest {
112    type Response = WatchResponse;
113
114    type Update = Self;
115
116    type Pattern = ServerStreaming;
117}
118
119impl RpcMsg<StoreService> for VersionRequest {
120    type Response = VersionResponse;
121}
122
123impl RpcMsg<StoreService> for GetRequest {
124    type Response = RpcResult<GetResponse>;
125}
126
127impl RpcMsg<StoreService> for PutRequest {
128    type Response = RpcResult<()>;
129}
130
131impl RpcMsg<StoreService> for HasRequest {
132    type Response = RpcResult<HasResponse>;
133}
134
135impl RpcMsg<StoreService> for PutManyRequest {
136    type Response = RpcResult<()>;
137}
138
139impl RpcMsg<StoreService> for GetLinksRequest {
140    type Response = RpcResult<GetLinksResponse>;
141}
142
143impl RpcMsg<StoreService> for GetSizeRequest {
144    type Response = RpcResult<GetSizeResponse>;
145}