1use serde::{Deserialize, Serialize};
2use std::fmt;
3
4#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
5#[serde(transparent)]
6pub struct RequestId(IdRepr);
7
8#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
9#[serde(untagged)]
10enum IdRepr {
11 I32(i32),
12 String(String),
13}
14
15impl From<i32> for RequestId {
16 fn from(id: i32) -> RequestId {
17 RequestId(IdRepr::I32(id))
18 }
19}
20
21impl From<String> for RequestId {
22 fn from(id: String) -> RequestId {
23 RequestId(IdRepr::String(id))
24 }
25}
26
27impl fmt::Display for RequestId {
28 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
29 match &self.0 {
30 IdRepr::I32(it) => fmt::Display::fmt(it, f),
31 IdRepr::String(it) => fmt::Debug::fmt(it, f),
32 }
33 }
34}