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
// Copyright 2021 MaidSafe.net limited.
//
// This SAFE Network Software is licensed to you under The General Public License (GPL), version 3.
// Unless required by applicable law or agreed to in writing, the SAFE Network Software distributed
// under the GPL Licence is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. Please review the Licences for the specific language governing
// permissions and limitations relating to use of the SAFE Network Software.
use crate::types::{Chunk, PublicKey};
use crate::{
messaging::{
data::{DataCmd, DataExchange, DataQuery, Result, StorageLevel},
EndUser, ServiceAuth,
},
types::ChunkAddress,
};
use serde::{Deserialize, Serialize};
use xor_name::XorName;
/// Command message sent among nodes
#[allow(clippy::large_enum_variant)]
#[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
pub enum NodeCmd {
/// Metadata is handled by Elders
Metadata {
/// The contianed command
cmd: DataCmd,
/// Requester pk and signature
auth: ServiceAuth,
/// Message source
origin: EndUser,
},
/// Chunks are stored by Adults
StoreChunk {
/// The chunk
chunk: Chunk,
/// Requester pk and signature
auth: ServiceAuth,
/// Message source
origin: EndUser,
},
/// Notify Elders on nearing max capacity
RecordStorageLevel {
/// Node Id
node_id: PublicKey,
/// Section to which the message needs to be sent to. (NB: this is the section of the node id).
section: XorName,
/// The storage level reported by the node.
level: StorageLevel,
},
/// Replicate a given chunk at an Adult (sent from elders on receipt of RepublishChunk)
ReplicateChunk(Chunk),
/// Tells the Elders to re-publish a chunk in the data section
RepublishChunk(Chunk),
/// Sent to all promoted nodes (also sibling if any) after
/// a completed transition to a new constellation.
ReceiveExistingData {
/// Metadata
metadata: DataExchange,
},
}
/// Query originating at a node
#[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
pub enum NodeQuery {
/// Metadata is handled by Elders
Metadata {
/// The actual query message
query: DataQuery,
/// Client signature
auth: ServiceAuth,
/// The user that has initiated this query
origin: EndUser,
},
/// Chunks are handled by Adults
GetChunk {
/// The chunk address
address: ChunkAddress,
/// The user that has initiated this query
origin: EndUser,
},
}
///
#[allow(clippy::large_enum_variant)]
#[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
pub enum NodeQueryResponse {
/// Elder to Adult Get.
GetChunk(Result<Chunk>),
}