refactor Ulid und Dataloader
This commit is contained in:
@@ -1,67 +1,26 @@
|
||||
use async_graphql::*;
|
||||
/// It is easier to track each type alias if this file is located on the top-level directory (here)
|
||||
/// than in each domain. Also, separating them will create a lot of duplicate code.
|
||||
use uuid::Uuid;
|
||||
use sqlx::{
|
||||
postgres::{PgArgumentBuffer, PgHasArrayType, PgTypeInfo, PgValueRef},
|
||||
Decode, Encode, Postgres, Type,
|
||||
};
|
||||
use ulid::Ulid as UlidPrimitive;
|
||||
|
||||
pub type Time = chrono::DateTime<chrono::Utc>;
|
||||
|
||||
/// The ID scalar type represents a unique identifier, often used to refetch an object or as key for a cache.
|
||||
/// The ID type appears in a JSON response as a String; however, it is not intended to be human-readable.
|
||||
/// When expected as an input type, any string (such as "4") or integer (such as 4) input value will be accepted as an ID.
|
||||
pub type Id = Uuid;
|
||||
pub type Id = uuid::Uuid;
|
||||
|
||||
// pub type Ulid = String;
|
||||
|
||||
// pub type Ulid = ulid::Ulid;
|
||||
|
||||
// #[derive(Clone, Copy, Eq, PartialEq)]
|
||||
// pub struct Ulid(pub ulid::Ulid);
|
||||
//
|
||||
// /// The ULID scalar type represents a Universally Unique Lexicographically Sortable Identifier as defined by the ULID specification.
|
||||
// /// ULIDs are 26-character strings that are URL-safe, case-insensitive, and lexicographically sortable,
|
||||
// /// making them ideal for distributed systems requiring time-ordered unique identifiers.
|
||||
// #[Scalar]
|
||||
// impl ScalarType for Ulid {
|
||||
// fn parse(value: Value) -> InputValueResult<Self> {
|
||||
// match value {
|
||||
// Value::String(s) => {
|
||||
// let ulid = ulid::Ulid::from_string(&s).map_err(InputValueError::custom)?;
|
||||
// Ok(Ulid(ulid))
|
||||
// }
|
||||
// _ => Err(InputValueError::expected_type(value)),
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// fn to_value(&self) -> Value {
|
||||
// Value::String(self.0.to_string())
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// impl fmt::Display for Ulid {
|
||||
// fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
// write!(f, "{}", self.0) // delegiert an Ulid::to_string()
|
||||
// }
|
||||
// }
|
||||
//
|
||||
//
|
||||
//
|
||||
use sqlx::{
|
||||
postgres::{PgArgumentBuffer, PgHasArrayType, PgTypeInfo, PgValueRef},
|
||||
Decode, Encode, Postgres, Type,
|
||||
};
|
||||
|
||||
// #[derive(sqlx::Type)]
|
||||
// #[sqlx(type_name = "ULID")]
|
||||
// #[sqlx(no_pg_array)]
|
||||
#[derive(Clone, Copy, PartialEq, Eq)]
|
||||
pub struct Ulid(pub ulid::Ulid);
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
|
||||
pub struct Ulid(pub UlidPrimitive);
|
||||
|
||||
#[Scalar]
|
||||
impl ScalarType for Ulid {
|
||||
fn parse(value: Value) -> InputValueResult<Self> {
|
||||
match value {
|
||||
Value::String(s) => {
|
||||
let ulid = ulid::Ulid::from_string(&s).map_err(InputValueError::custom)?;
|
||||
let ulid = UlidPrimitive::from_string(&s).map_err(InputValueError::custom)?;
|
||||
Ok(Ulid(ulid))
|
||||
}
|
||||
_ => Err(InputValueError::expected_type(value)),
|
||||
@@ -75,17 +34,19 @@ impl ScalarType for Ulid {
|
||||
|
||||
impl Type<Postgres> for Ulid {
|
||||
fn type_info() -> PgTypeInfo {
|
||||
PgTypeInfo::with_name("ULID")
|
||||
<String as Type<Postgres>>::type_info()
|
||||
}
|
||||
|
||||
fn compatible(ty: &PgTypeInfo) -> bool {
|
||||
<String as Type<Postgres>>::compatible(ty)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'r> Decode<'r, Postgres> for Ulid {
|
||||
fn decode(value: PgValueRef<'r>) -> Result<Self, Box<dyn std::error::Error + Send + Sync>> {
|
||||
let s = <String as Decode<Postgres>>::decode(value)?;
|
||||
|
||||
Ok(Ulid(ulid::Ulid::from_string(s.trim())?))
|
||||
Ok(Ulid(UlidPrimitive::from_string(s.trim())?))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,8 +58,9 @@ impl<'q> Encode<'q, Postgres> for Ulid {
|
||||
<String as Encode<Postgres>>::encode(self.0.to_string(), buf)
|
||||
}
|
||||
}
|
||||
|
||||
impl PgHasArrayType for Ulid {
|
||||
fn array_type_info() -> PgTypeInfo {
|
||||
PgTypeInfo::with_name("_ULID")
|
||||
<String as PgHasArrayType>::array_type_info()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user