starlane_core/resource/
user.rs

1use std::convert::{TryFrom, TryInto};
2use std::sync::Arc;
3
4use serde::{Deserialize, Serialize};
5
6use starlane_resources::{AssignResourceStateSrc, LocalStateSetSrc, Resource};
7use starlane_resources::data::{BinSrc, DataSet};
8
9use crate::error::Error;
10use crate::resource::{
11    ResourceAddress, ResourceType, UserKey,
12};
13
14#[derive(Clone)]
15pub struct User {
16    key: UserKey,
17    address: ResourceAddress,
18    state_src: DataSet<BinSrc>,
19}
20
21#[derive(Clone, Serialize, Deserialize)]
22pub struct UserState {
23    email: String,
24}
25
26impl UserState {
27    pub fn new(email: String) -> Self {
28        UserState { email: email }
29    }
30}
31
32impl TryInto<Vec<u8>> for UserState {
33    type Error = Error;
34
35    fn try_into(self) -> Result<Vec<u8>, Self::Error> {
36        Ok(bincode::serialize(&self)?)
37    }
38}
39
40impl TryInto<Arc<Vec<u8>>> for UserState {
41    type Error = Error;
42
43    fn try_into(self) -> Result<Arc<Vec<u8>>, Self::Error> {
44        Ok(Arc::new(bincode::serialize(&self)?))
45    }
46}
47
48impl TryFrom<Arc<Vec<u8>>> for UserState {
49    type Error = Error;
50
51    fn try_from(value: Arc<Vec<u8>>) -> Result<Self, Self::Error> {
52        Ok(bincode::deserialize::<UserState>(value.as_slice())?)
53    }
54}
55
56impl TryFrom<Vec<u8>> for UserState {
57    type Error = Error;
58
59    fn try_from(value: Vec<u8>) -> Result<Self, Self::Error> {
60        Ok(bincode::deserialize::<UserState>(value.as_slice())?)
61    }
62}