mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-29 21:35:58 +00:00
47 lines
1.2 KiB
Rust
47 lines
1.2 KiB
Rust
use {
|
|
crate::{TextRange, TextSize},
|
|
serde::{de, Deserialize, Deserializer, Serialize, Serializer},
|
|
};
|
|
|
|
impl Serialize for TextSize {
|
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
where
|
|
S: Serializer,
|
|
{
|
|
self.raw.serialize(serializer)
|
|
}
|
|
}
|
|
|
|
impl<'de> Deserialize<'de> for TextSize {
|
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
|
where
|
|
D: Deserializer<'de>,
|
|
{
|
|
u32::deserialize(deserializer).map(TextSize::from)
|
|
}
|
|
}
|
|
|
|
impl Serialize for TextRange {
|
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
where
|
|
S: Serializer,
|
|
{
|
|
(self.start(), self.end()).serialize(serializer)
|
|
}
|
|
}
|
|
|
|
impl<'de> Deserialize<'de> for TextRange {
|
|
#[allow(clippy::nonminimal_bool)]
|
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
|
where
|
|
D: Deserializer<'de>,
|
|
{
|
|
let (start, end) = Deserialize::deserialize(deserializer)?;
|
|
if !(start <= end) {
|
|
return Err(de::Error::custom(format!(
|
|
"invalid range: {start:?}..{end:?}"
|
|
)));
|
|
}
|
|
Ok(TextRange::new(start, end))
|
|
}
|
|
}
|