icydb_core/db/query/
save.rs1use crate::{Error, serialize, traits::EntityKind};
2use candid::CandidType;
3use derive_more::Display;
4use serde::{Deserialize, Serialize};
5
6#[derive(CandidType, Clone, Copy, Debug, Default, Deserialize, Display, Serialize)]
15pub enum SaveMode {
16 #[default]
17 Insert,
18 Replace,
19 Update,
20 }
22
23#[derive(CandidType, Clone, Debug, Default, Deserialize, Serialize)]
28pub struct SaveQuery {
29 pub mode: SaveMode,
30 pub bytes: Vec<u8>,
31}
32
33impl SaveQuery {
34 #[must_use]
35 pub fn new(mode: SaveMode) -> Self {
37 Self {
38 mode,
39 ..Default::default()
40 }
41 }
42
43 pub fn from<E: EntityKind>(mut self, input: impl Into<E>) -> Result<Self, Error> {
46 let entity = input.into();
47 self.bytes = serialize(&entity)?;
48
49 Ok(self)
50 }
51
52 #[must_use]
54 pub fn from_bytes(mut self, bytes: &[u8]) -> Self {
56 self.bytes = bytes.to_vec();
57 self
58 }
59
60 pub fn from_entity<E: EntityKind>(mut self, entity: E) -> Result<Self, Error> {
63 self.bytes = serialize(&entity)?;
64
65 Ok(self)
66 }
67}