Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-core/src/serde/series.rs
6940 views
1
use polars_utils::pl_serialize::deserialize_map_bytes;
2
use serde::de::Error;
3
use serde::{Deserialize, Deserializer, Serialize, Serializer};
4
5
use crate::prelude::*;
6
7
impl Series {
8
pub fn serialize_into_writer(&self, writer: &mut dyn std::io::Write) -> PolarsResult<()> {
9
let mut df =
10
unsafe { DataFrame::new_no_checks_height_from_first(vec![self.clone().into_column()]) };
11
12
df.serialize_into_writer(writer)
13
}
14
15
pub fn serialize_to_bytes(&self) -> PolarsResult<Vec<u8>> {
16
let mut buf = vec![];
17
self.serialize_into_writer(&mut buf)?;
18
19
Ok(buf)
20
}
21
22
pub fn deserialize_from_reader(reader: &mut dyn std::io::Read) -> PolarsResult<Self> {
23
let df = DataFrame::deserialize_from_reader(reader)?;
24
25
if df.width() != 1 {
26
polars_bail!(
27
ShapeMismatch:
28
"expected only 1 column when deserializing Series from IPC, got columns: {:?}",
29
df.schema().iter_names().collect::<Vec<_>>()
30
)
31
}
32
33
Ok(df.take_columns().swap_remove(0).take_materialized_series())
34
}
35
}
36
37
impl Serialize for Series {
38
fn serialize<S>(
39
&self,
40
serializer: S,
41
) -> std::result::Result<<S as Serializer>::Ok, <S as Serializer>::Error>
42
where
43
S: Serializer,
44
{
45
use serde::ser::Error;
46
47
serializer.serialize_bytes(
48
self.serialize_to_bytes()
49
.map_err(S::Error::custom)?
50
.as_slice(),
51
)
52
}
53
}
54
55
impl<'de> Deserialize<'de> for Series {
56
fn deserialize<D>(deserializer: D) -> std::result::Result<Self, <D as Deserializer<'de>>::Error>
57
where
58
D: Deserializer<'de>,
59
{
60
deserialize_map_bytes(deserializer, |b| {
61
let v = &mut b.as_ref();
62
Self::deserialize_from_reader(v)
63
})?
64
.map_err(D::Error::custom)
65
}
66
}
67
68
#[cfg(feature = "dsl-schema")]
69
impl schemars::JsonSchema for Series {
70
fn schema_name() -> String {
71
"Series".to_owned()
72
}
73
74
fn schema_id() -> std::borrow::Cow<'static, str> {
75
std::borrow::Cow::Borrowed(concat!(module_path!(), "::", "Series"))
76
}
77
78
fn json_schema(generator: &mut schemars::r#gen::SchemaGenerator) -> schemars::schema::Schema {
79
Vec::<u8>::json_schema(generator)
80
}
81
}
82
83