1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
//! # rhizo-types
//!
//! `rhizo-types` is a collection of common Structs and Enums used in the software components
//! comprising the Rhizo network.

use borsh::{BorshSerialize, BorshDeserialize};         
use serde::{Serialize, Deserialize};

/// Representation of OnchainBytes as exists on the Solana blockchain
#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
pub struct OnchainBytes {
    pub inner: Vec<u8>
}

/// Representation of RouteData as exists on the Solana blockchain
#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
pub struct RouteData {
    pub route: String,
    pub module_cid: [u8; 32],
    pub encodings: Vec<Encoding>,
    pub arguments: Vec<(Vec<u8>, ArgumentType)>,
    pub cache_config: (bool, Option<u64>),
    pub bump_seed: Option<u8>,
}

/// Representation of RouteData as exists on the Solana blockchain
#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
pub struct RouteUpdate {
    pub route: String,
    pub dev_routes_bump_seed: Option<u8>
}

/// Representation of DeveloperRoutes as exists on the Solana blockchain
#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
pub struct DeveloperRoutes {
    pub routes: Vec<String>,
}

/// Representation of route deploy data
#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
pub struct RouteDeploy {
    pub source: Vec<u8>,
    pub metadata: RouteData
}

/// Supported HTTP route encoding types
#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
pub enum Encoding {
    ApplicationJson,
    ApplicationOctetStream,
    TextHtml,
    TextPlain,
}

/// Supported types for route arguments
#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
pub enum ArgumentType {
    U8,
    U16,
    U32,
    U64,
    I8,
    I16,
    I32,
    I64,
    F32,
    F64,
    Bool,
    Str,
    Array(CollectionType),
    Map(CollectionType, CollectionType)
}

/// Supported types for top-level collections of route argument types
#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
pub enum CollectionType {
    U8,
    U16,
    U32,
    U64,
    I8,
    I16,
    I32,
    I64,
    F32,
    F64,
    Bool,
    Str,
    Array(NestedCollectionType),
    Map(NestedCollectionType, NestedCollectionType)
}

/// Supported types for singly nested collections of route argument types
#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
pub enum NestedCollectionType {
    U8,
    U16,
    U32,
    U64,
    I8,
    I16,
    I32,
    I64,
    F32,
    F64,
    Bool,
    Str,
}