Skip to content

Commit eb76b2c

Browse files
committed
Move GenericStringModel to warp_server_client.
1 parent aaf4b43 commit eb76b2c

6 files changed

Lines changed: 68 additions & 62 deletions

File tree

app/src/cloud_object/mod.rs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -807,17 +807,6 @@ where
807807
Box::new(self.clone())
808808
}
809809
}
810-
impl<T, S> ServerObjectModel for GenericStringModel<T, S>
811-
where
812-
T: StringModel<
813-
CloudObjectType = GenericCloudObject<GenericStringObjectId, GenericStringModel<T, S>>,
814-
>,
815-
S: Serializer<T>,
816-
{
817-
fn object_type(&self) -> ObjectType {
818-
<Self as CloudModelType>::object_type(self)
819-
}
820-
}
821810

822811
impl ServerObjectModel for CloudFolderModel {
823812
fn object_type(&self) -> ObjectType {

app/src/cloud_object/model/generic_string_model.rs

Lines changed: 1 addition & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use anyhow::Result;
55
use async_trait::async_trait;
66
use warp_server_client::cloud_object::CloudObjectUpsertParams;
77
// Re-exported from warp_server_client.
8+
pub use warp_server_client::cloud_object::{GenericStringModel, Serializer};
89
pub use warp_server_client::ids::GenericStringObjectId;
910

1011
use crate::appearance::Appearance;
@@ -119,27 +120,6 @@ pub trait StringModel: Clone + Debug + PartialEq + Send + Sync + 'static {
119120
fn uniqueness_key(&self) -> Option<GenericStringObjectUniqueKey>;
120121
}
121122

122-
/// A serializer goes from a model to a string and back.
123-
pub trait Serializer<M>: Debug + Clone + 'static {
124-
fn serialize(model: &M) -> SerializedModel;
125-
fn deserialize_owned(serialized: &str) -> Result<M>
126-
where
127-
Self: Sized;
128-
}
129-
130-
/// A `GenericStringModel` is a generic implementation of model types that can serialize to/from string.
131-
/// given a particular serializer.
132-
#[derive(Clone, Debug, PartialEq, Default)]
133-
pub struct GenericStringModel<M, S>
134-
where
135-
M: StringModel<
136-
CloudObjectType = GenericCloudObject<GenericStringObjectId, GenericStringModel<M, S>>,
137-
>,
138-
S: Serializer<M>,
139-
{
140-
pub string_model: M,
141-
}
142-
143123
impl<M, S> CloudStringObject for GenericCloudObject<GenericStringObjectId, GenericStringModel<M, S>>
144124
where
145125
M: StringModel<
@@ -346,25 +326,3 @@ where
346326
self.string_model.to_warp_drive_item(id, appearance, object)
347327
}
348328
}
349-
350-
impl<M, S> GenericStringModel<M, S>
351-
where
352-
M: StringModel<
353-
CloudObjectType = GenericCloudObject<GenericStringObjectId, GenericStringModel<M, S>>,
354-
>,
355-
S: Serializer<M>,
356-
{
357-
pub fn deserialize_owned(serialized: &str) -> Result<Self> {
358-
S::deserialize_owned(serialized).map(Self::new)
359-
}
360-
361-
pub fn new(model: M) -> Self {
362-
Self {
363-
string_model: model,
364-
}
365-
}
366-
367-
pub fn json_model(&self) -> &M {
368-
&self.string_model
369-
}
370-
}

app/src/cloud_object/model/json_model.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use serde::de::DeserializeOwned;
22
use serde::Serialize;
3+
use warp_server_client::cloud_object::GenericStringObjectFormat;
34

45
use super::generic_string_model::{Serializer, StringModel};
56
use crate::cloud_object::JsonObjectType;
@@ -15,6 +16,9 @@ pub trait JsonModel: StringModel + Serialize + DeserializeOwned + 'static {
1516
pub struct JsonSerializer;
1617

1718
impl<M: JsonModel> Serializer<M> for JsonSerializer {
19+
fn model_format() -> GenericStringObjectFormat {
20+
M::model_format()
21+
}
1822
fn serialize(model: &M) -> SerializedModel {
1923
SerializedModel::new(serde_json::to_string(model).expect("model should serialize"))
2024
}

app/src/search/ai_context_menu/rules/data_source_tests.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,12 @@ type ServerAIFact = GenericServerObject<
3838
fn mock_server_ai_fact(id: i64, name: &str, content: &str, revision: Revision) -> ServerAIFact {
3939
GenericServerObject::new(
4040
SyncId::ServerId(id.into()),
41-
GenericStringModel {
42-
string_model: AIFact::Memory(AIMemory {
43-
name: Some(name.to_string()),
44-
content: content.to_string(),
45-
is_autogenerated: false,
46-
suggested_logging_id: None,
47-
}),
48-
},
41+
GenericStringModel::new(AIFact::Memory(AIMemory {
42+
name: Some(name.to_string()),
43+
content: content.to_string(),
44+
is_autogenerated: false,
45+
suggested_logging_id: None,
46+
})),
4947
ServerMetadata {
5048
uid: ServerId::default(),
5149
revision,
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
use std::{fmt::Debug, marker::PhantomData};
2+
3+
use anyhow::Result;
4+
5+
use super::{GenericStringObjectFormat, ObjectType, SerializedModel, ServerObjectModel};
6+
7+
/// A serializer goes from a model to a string and back.
8+
pub trait Serializer<M>: Debug + Clone + 'static {
9+
fn model_format() -> GenericStringObjectFormat;
10+
fn serialize(model: &M) -> SerializedModel;
11+
fn deserialize_owned(serialized: &str) -> Result<M>
12+
where
13+
Self: Sized;
14+
}
15+
16+
/// A `GenericStringModel` is a generic implementation of model types that can serialize to/from string.
17+
/// given a particular serializer.
18+
#[derive(Clone, Debug, PartialEq, Default)]
19+
pub struct GenericStringModel<M, S>
20+
where
21+
S: Serializer<M>,
22+
{
23+
pub string_model: M,
24+
_serializer: PhantomData<fn() -> S>,
25+
}
26+
27+
impl<M, S> GenericStringModel<M, S>
28+
where
29+
S: Serializer<M>,
30+
{
31+
pub fn deserialize_owned(serialized: &str) -> Result<Self> {
32+
S::deserialize_owned(serialized).map(Self::new)
33+
}
34+
35+
pub fn new(model: M) -> Self {
36+
Self {
37+
string_model: model,
38+
_serializer: PhantomData,
39+
}
40+
}
41+
42+
pub fn json_model(&self) -> &M {
43+
&self.string_model
44+
}
45+
}
46+
47+
impl<M, S> ServerObjectModel for GenericStringModel<M, S>
48+
where
49+
M: Debug + Clone + Send + Sync + 'static,
50+
S: Serializer<M>,
51+
{
52+
fn object_type(&self) -> ObjectType {
53+
ObjectType::GenericStringObject(S::model_format())
54+
}
55+
}

crates/warp_server_client/src/cloud_object/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,13 @@ use crate::ids::{FolderId, ServerId, SyncId};
2626

2727
mod creation;
2828
mod generic_cloud_object;
29+
mod generic_string_model;
2930
mod server_object;
3031
mod update;
3132

3233
pub use creation::*;
3334
pub use generic_cloud_object::*;
35+
pub use generic_string_model::*;
3436
pub use server_object::*;
3537
pub use update::*;
3638
/// The type of object id each ObjectType corresponds to.

0 commit comments

Comments
 (0)