mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-21 16:28:11 +08:00
Groundwork for integrating Specta (#949)
* add derive(specta::Type) * use specta from git * introduce Uuid type * remove unnecessary specta::Type * document export_types test * upgrade Specta The previous Specta branch had some hacks that were just for this project. They have all been converted into proper features so they can be merged into main. * remove some unnecessary specta::Type uses * add MessageDiscriminantDef explanation * manually export types with specta * rename 'specta.rs' to 'export_types.rs' * rename 'export_types' to 'generate_ts_types' --------- Co-authored-by: Oscar Beaumont <oscar@otbeaumont.me>
This commit is contained in:
committed by
Keavon Chambers
co-authored by
Oscar Beaumont
parent
e0146d57f7
commit
5388b59e97
@@ -0,0 +1,42 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Clone, Copy, Serialize, Deserialize, specta::Type)]
|
||||
pub struct Uuid(
|
||||
#[serde(with = "u64_string")]
|
||||
#[specta(type = String)]
|
||||
u64,
|
||||
);
|
||||
|
||||
mod u64_string {
|
||||
use serde::{self, Deserialize, Deserializer, Serializer};
|
||||
use std::str::FromStr;
|
||||
|
||||
// The signature of a serialize_with function must follow the pattern:
|
||||
//
|
||||
// fn serialize<S>(&T, S) -> Result<S::Ok, S::Error>
|
||||
// where
|
||||
// S: Serializer
|
||||
//
|
||||
// although it may also be generic over the input types T.
|
||||
pub fn serialize<S>(value: &u64, serializer: S) -> Result<S::Ok, S::Error>
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
serializer.serialize_str(&value.to_string())
|
||||
}
|
||||
|
||||
// The signature of a deserialize_with function must follow the pattern:
|
||||
//
|
||||
// fn deserialize<'de, D>(D) -> Result<T, D::Error>
|
||||
// where
|
||||
// D: Deserializer<'de>
|
||||
//
|
||||
// although it may also be generic over the output types T.
|
||||
pub fn deserialize<'de, D>(deserializer: D) -> Result<u64, D::Error>
|
||||
where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
let s = String::deserialize(deserializer)?;
|
||||
u64::from_str(&s).map_err(serde::de::Error::custom)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user