rhizo_types/
lib.rs

1//! # rhizo-types
2//!
3//! `rhizo-types` is a collection of common Structs and Enums used in the software components
4//! comprising the Rhizo network.
5
6use borsh::{BorshSerialize, BorshDeserialize};         
7use serde::{Serialize, Deserialize};
8
9/// Add an event source for a route
10#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
11pub struct OnChainProcessor {
12    pub name: String,
13    pub event_source_type: EventSourceType,
14    pub filter: String,
15    pub write_enabled: bool,
16    pub module_cid: [u8; 32],
17    pub owner_pubkey: [u8; 32],
18    pub write_pubkey: Option<[u8; 32]>,
19}
20
21#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
22pub struct AddOnChainProcessor {
23    pub processor: OnChainProcessor,
24    pub bump_seed: u8
25}
26
27#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
28pub struct AddFilteredEvent {
29    pub filtered_event: FilteredEvent,
30    pub bump_seed: u8,
31}
32
33/// Remove an event source for a route
34#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
35pub struct DeleteOnchainProcessor {
36    pub owner_pubkey: String,
37    pub name: String,
38}
39
40#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
41pub struct FilteredEvent {
42    pub event_hash: String,
43    pub processor_pda: String,
44}
45
46#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
47pub struct AddInvocationClaim {
48    pub invocation_claim: InvocationClaim,
49    pub bump_seed: u8,
50}
51
52#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
53pub struct InvocationClaim {
54    pub filtered_event_pda: String,
55    pub processor_pda: String,
56}
57
58#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
59pub struct InvocationAssignment {
60    pub filtered_event_pda: String,
61    pub assignee_pda: String,
62    pub processor_pda: String,
63    pub result_hash: String,
64}
65
66/// Possible EventSource types
67#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
68pub enum EventSourceType {
69    Program,
70    Account,
71}
72
73/// Update the listing for a signed on-chain bytes
74#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
75pub struct IndexUserPDAResource {
76    pub seed: String,
77}
78
79/// Representation of OnchainBytes as exists on the Solana blockchain
80#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
81pub struct SignedOnchainBytes {
82    pub inner: Vec<u8>,
83    pub owner_pubkey: [u8; 32]
84}
85
86/// Smart-contract update instruction for OnchainBytes
87#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
88pub struct SignedOnchainBytesUpdate {
89    pub bytes: SignedOnchainBytes,
90    pub seed: String,
91    pub bump_seed: Option<u8>,
92}
93
94/// Representation of RouteData as exists on the Solana blockchain
95#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
96pub struct RouteData {
97    pub route: String,
98    pub module_cid: [u8; 32],
99    pub encodings: Vec<Encoding>,
100    pub arguments: Vec<(Vec<u8>, ArgumentType)>,
101    pub cache_config: (bool, Option<u64>),
102    pub bump_seed: Option<u8>, // send this off to an RouteDataUpdate
103}
104
105/// Representation of RouteData as exists on the Solana blockchain
106#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
107pub struct RouteUpdate {
108    pub route: String,
109    pub bump_seed: Option<u8>,
110    pub operation: u8,
111}
112
113/// Representation of a list of User owned resources, backed by on-chain PDAs
114#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
115pub struct UserPDAResources {
116    pub seeds: Vec<String>,
117}
118
119/// Representation of route deploy data
120#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
121pub struct RouteDeploy {
122    pub source: Vec<u8>,
123    pub metadata: RouteData
124}
125
126#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
127pub struct ProcessorDeploy {
128    pub source: Vec<u8>,
129    pub metadata: OnChainProcessor,
130}
131
132/// Supported HTTP route encoding types
133#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
134pub enum Encoding {
135    ApplicationJson,
136    ApplicationOctetStream,
137    TextHtml,
138    TextPlain,
139}
140
141/// Supported types for route arguments
142#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
143pub enum ArgumentType {
144    U8,
145    U16,
146    U32,
147    U64,
148    I8,
149    I16,
150    I32,
151    I64,
152    F32,
153    F64,
154    Bool,
155    Str,
156    Array(CollectionType),
157    Map(CollectionType, CollectionType)
158}
159
160/// Supported types for top-level collections of route argument types
161#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
162pub enum CollectionType {
163    U8,
164    U16,
165    U32,
166    U64,
167    I8,
168    I16,
169    I32,
170    I64,
171    F32,
172    F64,
173    Bool,
174    Str,
175    Array(NestedCollectionType),
176    Map(NestedCollectionType, NestedCollectionType)
177}
178
179/// Supported types for singly nested collections of route argument types
180#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
181pub enum NestedCollectionType {
182    U8,
183    U16,
184    U32,
185    U64,
186    I8,
187    I16,
188    I32,
189    I64,
190    F32,
191    F64,
192    Bool,
193    Str,
194}
195