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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
//! # 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};

/// Update the listing for a signed on-chain bytes
#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
pub struct ListSignedOnchainBytesUpdate {
    pub seed: String
}

/// Update the listing for a signed on-chain bytes
#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
pub struct DeveloperSignedOnchainBytes {
    pub seeds: Vec<String>
}


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

/// Smart-contract update instruction for OnchainBytes
#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, Eq, PartialEq, Serialize, Deserialize)]
pub struct SignedOnchainBytesUpdate {
    pub bytes: SignedOnchainBytes,
    pub seed: String,
    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 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>, // send this off to an RouteDataUpdate
}

/// 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 bump_seed: Option<u8>,
    pub operation: 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,
}