1use serde::de::{Error, Unexpected, Visitor};
23use serde::{Deserialize, Deserializer};
24use std::fmt;
25
26pub mod blobs;
27pub mod comments;
28pub mod data_sources;
29pub mod events;
30pub mod files;
31pub mod formatting;
32pub mod labels;
33pub mod names;
34pub mod notebooks;
35pub mod providers;
36pub mod proxies;
37pub mod query_data;
38pub mod realtime;
39pub mod snippets;
40pub mod sorting;
41pub mod templates;
42pub mod timestamps;
43pub mod tokens;
44pub mod users;
45pub mod utils;
46pub mod views;
47pub mod workspaces;
48
49fn debug_print_bytes(bytes: impl AsRef<[u8]>) -> String {
50 let bytes = bytes.as_ref();
51 if bytes.len() > 100 {
52 format!("{}...", String::from_utf8_lossy(&bytes[..100]))
53 } else {
54 String::from_utf8_lossy(bytes).to_string()
55 }
56}
57
58pub(crate) fn deserialize_some<'de, T, D>(deserializer: D) -> Result<Option<T>, D::Error>
61where
62 T: Deserialize<'de>,
63 D: Deserializer<'de>,
64{
65 Deserialize::deserialize(deserializer).map(Some)
66}
67
68pub(crate) fn deserialize_u32<'de, D: Deserializer<'de>>(deserializer: D) -> Result<u32, D::Error> {
73 deserializer.deserialize_str(U32Visitor)
74}
75
76struct U32Visitor;
77
78impl<'de> Visitor<'de> for U32Visitor {
79 type Value = u32;
80
81 fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
82 formatter.write_str("an u32")
83 }
84
85 fn visit_u32<E>(self, v: u32) -> Result<Self::Value, E>
86 where
87 E: Error,
88 {
89 Ok(v)
90 }
91
92 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
93 where
94 E: Error,
95 {
96 v.parse()
97 .map_err(|_| Error::invalid_type(Unexpected::Str(v), &self))
98 }
99
100 fn visit_borrowed_str<E>(self, v: &'de str) -> Result<Self::Value, E>
101 where
102 E: Error,
103 {
104 v.parse()
105 .map_err(|_| Error::invalid_type(Unexpected::Str(v), &self))
106 }
107
108 fn visit_string<E>(self, v: String) -> Result<Self::Value, E>
109 where
110 E: Error,
111 {
112 v.parse()
113 .map_err(|_| Error::invalid_type(Unexpected::Str(&v), &self))
114 }
115}