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 {
36 Self {
37 mode,
38 ..Default::default()
39 }
40 }
41
42 pub fn from<E: EntityKind>(mut self, input: impl Into<E>) -> Result<Self, Error> {
44 let entity = input.into();
45 self.bytes = serialize(&entity)?;
46
47 Ok(self)
48 }
49
50 #[must_use]
52 pub fn from_bytes(mut self, bytes: &[u8]) -> Self {
53 self.bytes = bytes.to_vec();
54 self
55 }
56
57 pub fn from_entity<E: EntityKind>(mut self, entity: E) -> Result<Self, Error> {
59 self.bytes = serialize(&entity)?;
60
61 Ok(self)
62 }
63}