stellation_bridge/
routines.rs1use std::error::Error;
4use std::hash::Hash;
5use std::marker::PhantomData;
6use std::rc::Rc;
7
8use serde::{Deserialize, Serialize};
9
10use crate::error::BridgeError;
11
12#[cold]
13fn panic_network_error(e: BridgeError) -> ! {
14 panic!("failed to communicate with server: {e:?}");
15}
16
17pub trait BridgedQuery: Serialize + for<'de> Deserialize<'de> + PartialEq {
22 type Input: 'static + Serialize + for<'de> Deserialize<'de> + Hash + Eq + Clone;
24 type Error: 'static + Serialize + for<'de> Deserialize<'de> + Error + PartialEq + Clone;
26
27 #[cold]
34 fn into_query_error(e: BridgeError) -> Self::Error {
35 panic_network_error(e);
36 }
37}
38
39pub type QueryResult<T> = std::result::Result<Rc<T>, <T as BridgedQuery>::Error>;
41
42pub trait BridgedMutation: Serialize + for<'de> Deserialize<'de> + PartialEq {
46 type Input: 'static + Serialize + for<'de> Deserialize<'de>;
48 type Error: 'static + Serialize + for<'de> Deserialize<'de> + Error + PartialEq + Clone;
50
51 #[cold]
58 fn into_mutation_error(e: BridgeError) -> Self::Error {
59 panic_network_error(e);
60 }
61}
62
63pub type MutationResult<T> = std::result::Result<Rc<T>, <T as BridgedMutation>::Error>;
65
66#[derive(thiserror::Error, Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
68#[error("this never happens")]
69pub struct Never(PhantomData<()>);