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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#![forbid(unsafe_code)]
#![warn(
clippy::cargo,
missing_docs,
clippy::nursery,
clippy::pedantic,
future_incompatible,
rust_2018_idioms,
)]
#![cfg_attr(doc, deny(rustdoc))]
#![allow(
clippy::missing_errors_doc,
clippy::option_if_let_else,
)]
pub use num_traits;
pub mod connection;
pub mod document;
pub mod limits;
pub mod schema;
pub mod transaction;
pub mod kv;
#[cfg(feature = "networking")]
pub use fabruic;
#[cfg(feature = "networking")]
pub mod networking;
#[cfg(feature = "pubsub")]
pub mod pubsub;
#[cfg(feature = "pubsub")]
pub use circulate;
use schema::{CollectionName, SchemaName};
use serde::{Deserialize, Serialize};
#[derive(Clone, thiserror::Error, Debug, Serialize, Deserialize)]
pub enum Error {
#[error(
"database '{database_name}' was created with schema '{stored_schema}', not '{schema}'"
)]
SchemaMismatch {
database_name: String,
schema: SchemaName,
stored_schema: SchemaName,
},
#[error("schema '{0}' was already registered")]
SchemaAlreadyRegistered(SchemaName),
#[error("schema '{0}' is not registered with this server")]
SchemaNotRegistered(SchemaName),
#[error("invalid database name: {0}")]
InvalidDatabaseName(String),
#[error("database '{0}' was not found")]
DatabaseNotFound(String),
#[error("a database with name '{0}' already exists")]
DatabaseNameAlreadyTaken(String),
#[error("error from storage: {0}")]
Database(String),
#[error("error from server: {0}")]
Server(String),
#[error("a transport error occurred: '{0}'")]
Transport(String),
#[cfg(feature = "websockets")]
#[error("a websocket error occurred: '{0}'")]
Websocket(String),
#[cfg(feature = "networking")]
#[error("a networking error occurred: '{0}'")]
Networking(networking::Error),
#[error("an io error occurred: '{0}'")]
Io(String),
#[error("a configuration error occurred: '{0}'")]
Configuration(String),
#[error("an io error in the client: '{0}'")]
Client(String),
#[error("attempted to access a collection not registered with this schema")]
CollectionNotFound,
#[error("the requested document id {1} from collection {0} was not found")]
DocumentNotFound(CollectionName, u64),
#[error("a conflict was detected while updating document id {1} from collection {0}")]
DocumentConflict(CollectionName, u64),
#[error("an invalid name was used in a schema: {0}")]
InvalidName(#[from] schema::InvalidNameError),
}
impl From<serde_cbor::Error> for Error {
fn from(err: serde_cbor::Error) -> Self {
Self::Database(err.to_string())
}
}
#[cfg(any(feature = "test-util", test))]
#[allow(missing_docs)]
pub mod test_util;