Skip to content

Commit cd81f8f

Browse files
committed
Make serde an optional dependency
1 parent d82f56a commit cd81f8f

File tree

7 files changed

+46
-22
lines changed

7 files changed

+46
-22
lines changed

Cargo.toml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,20 @@ categories = ["command-line-utilities"]
1414

1515
[dependencies]
1616
pulldown-cmark = "0.13.0"
17-
serde = { version = "1.0.219", features = ["derive"] }
17+
version-compare = "0.2.0"
1818
clap = { version = "4.5.45", features = ["cargo"], optional = true }
1919
owo-colors = { version = "4.2.2", features = ["supports-colors"], optional = true }
20+
serde = { version = "1.0.219", features = ["derive"], optional = true }
2021
serde_json = { version = "1.0.143", optional = true }
21-
version-compare = "0.2.0"
2222
toml = { version = "0.9.5", features = ["parse", "serde"], optional = true }
2323

2424
[dev-dependencies]
2525
criterion = "0.3"
2626
insta = { version = "1.43.1", features = ["redactions", "yaml"] }
2727

2828
[features]
29-
cli = ["dep:clap", "dep:serde_json", "dep:owo-colors", "dep:toml"]
29+
cli = ["serde", "dep:clap", "dep:serde_json", "dep:owo-colors", "dep:toml"]
30+
serde = ["dep:serde"]
3031

3132
[lib]
3233
name = "notabene"

src/ast/block.rs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,38 @@
11
//! AST block elements.
2+
#[cfg(feature = "serde")]
23
use serde::{Deserialize, Serialize};
34

45
use crate::span::Span;
56

67
/// A block element.
7-
#[derive(Debug, PartialEq, Deserialize, Serialize)]
8+
#[derive(Debug, PartialEq)]
9+
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
810
pub enum Block {
911
Heading(Heading),
1012
Paragraph(Literal),
1113
List(List),
1214
}
1315

1416
/// An inline element.
15-
#[derive(Debug, PartialEq, Deserialize, Serialize)]
17+
#[derive(Debug, PartialEq)]
18+
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
1619
pub enum Inline {
1720
Link(Link),
1821
Literal(Literal),
1922
}
2023

2124
/// A section heading.
22-
#[derive(Debug, PartialEq, Deserialize, Serialize)]
25+
#[derive(Debug, PartialEq)]
26+
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
2327
pub struct Heading {
2428
pub span: Span,
2529
pub level: usize,
2630
pub inlines: Vec<Inline>,
2731
}
2832

2933
/// A link.
30-
#[derive(Debug, PartialEq, Deserialize, Serialize)]
34+
#[derive(Debug, PartialEq)]
35+
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
3136
pub struct Link {
3237
pub span: Span,
3338
pub content: Literal,
@@ -36,13 +41,15 @@ pub struct Link {
3641
}
3742

3843
/// Literal markup.
39-
#[derive(Debug, PartialEq, Deserialize, Serialize)]
44+
#[derive(Debug, PartialEq)]
45+
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
4046
pub struct Literal {
4147
pub span: Span,
4248
}
4349

4450
/// An unordered list.
45-
#[derive(Debug, PartialEq, Deserialize, Serialize)]
51+
#[derive(Debug, PartialEq)]
52+
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
4653
pub struct List {
4754
pub span: Span,
4855
pub items: Vec<Literal>,

src/changelog/parsed.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
//! Borrowed versions of changelog types.
22
//!
33
//! These types also contain location information, used by the [`Linter`](crate::linter::Linter).
4+
#[cfg(feature = "serde")]
45
use serde::Serialize;
56

67
use crate::span::{Locator, Span, Spanned};
@@ -10,7 +11,8 @@ use super::{owned, traits};
1011

1112
type SpannedStr<'a> = Spanned<&'a str>;
1213

13-
#[derive(Debug, Default, PartialEq, Serialize)]
14+
#[derive(Debug, Default, PartialEq)]
15+
#[cfg_attr(feature = "serde", derive(Serialize))]
1416
pub struct ParsedChangelog<'a> {
1517
pub(crate) source: &'a str,
1618
pub(crate) title: Option<SpannedStr<'a>>,
@@ -19,14 +21,16 @@ pub struct ParsedChangelog<'a> {
1921
pub(crate) invalid_spans: Vec<InvalidSpan>,
2022
}
2123

22-
#[derive(Debug, Default, PartialEq, Serialize)]
24+
#[derive(Debug, Default, PartialEq)]
25+
#[cfg_attr(feature = "serde", derive(Serialize))]
2326
pub struct ParsedUnreleased<'a> {
2427
pub(crate) heading_span: Span,
2528
pub(crate) url: Option<String>,
2629
pub(crate) changes: Vec<ParsedChanges<'a>>,
2730
}
2831

29-
#[derive(Debug, Default, PartialEq, Serialize)]
32+
#[derive(Debug, Default, PartialEq)]
33+
#[cfg_attr(feature = "serde", derive(Serialize))]
3034
pub struct ParsedRelease<'a> {
3135
pub(crate) heading_span: Span,
3236
pub(crate) version: SpannedStr<'a>,
@@ -36,14 +40,16 @@ pub struct ParsedRelease<'a> {
3640
pub(crate) changes: Vec<ParsedChanges<'a>>,
3741
}
3842

39-
#[derive(Debug, Default, PartialEq, Serialize)]
43+
#[derive(Debug, Default, PartialEq)]
44+
#[cfg_attr(feature = "serde", derive(Serialize))]
4045
pub struct ParsedChanges<'a> {
4146
pub(crate) heading_span: Span,
4247
pub(crate) kind: SpannedStr<'a>,
4348
pub(crate) items: Vec<SpannedStr<'a>>,
4449
}
4550

46-
#[derive(Debug, PartialEq, Serialize)]
51+
#[derive(Debug, PartialEq)]
52+
#[cfg_attr(feature = "serde", derive(Serialize))]
4753
pub enum InvalidSpan {
4854
InvalidTitle(Span),
4955
InvalidSectionHeading(Span),

src/diagnostic.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
use std::ops::Range;
33
use std::path::PathBuf;
44

5+
#[cfg(feature = "serde")]
56
use serde::{Deserialize, Serialize};
67

78
use crate::rule::Rule;
@@ -13,7 +14,8 @@ use crate::span::{Locator, Position, Ranged, Span};
1314
/// [`Diagnostic::new`] accepts a `Span`.
1415
///
1516
/// Use [`Diagnostic::locate`] to convert a `Diagnostic<Span>` to a `Diagnostic<Position>`.
16-
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
17+
#[derive(Clone, Debug, PartialEq)]
18+
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
1719
pub struct Diagnostic<L = Span> {
1820
/// The rule that was violated.
1921
pub rule: Rule,

src/rule.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
use std::collections::HashMap;
33
use std::sync::LazyLock;
44

5+
#[cfg(feature = "serde")]
56
use serde::de::{self, Visitor};
7+
#[cfg(feature = "serde")]
68
use serde::{Deserialize, Deserializer, Serialize};
79

810
pub static RULES_BY_CODE: LazyLock<HashMap<String, Rule>> = LazyLock::new(|| {
@@ -15,7 +17,8 @@ pub static RULES_BY_CODE: LazyLock<HashMap<String, Rule>> = LazyLock::new(|| {
1517
macro_rules! rules {
1618
($($rule:ident = ($doc:literal, $code:literal, $message:literal $(,)?)),* $(,)?) => {
1719
/// A linter rule.
18-
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, Serialize)]
20+
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
21+
#[cfg_attr(feature = "serde", derive(Serialize))]
1922
#[non_exhaustive]
2023
pub enum Rule {
2124
$(#[doc = concat!("`", $code, "`. ")] #[doc = $doc] $rule),*
@@ -162,6 +165,7 @@ impl TryFrom<&str> for Rule {
162165
}
163166
}
164167

168+
#[cfg(feature = "serde")]
165169
impl<'de> Deserialize<'de> for Rule {
166170
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
167171
where

src/span.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
//! Work with spans within the source document.
22
use std::ops::{Deref, Range};
33

4+
#[cfg(feature = "serde")]
45
use serde::{Deserialize, Serialize};
56

67
mod iter;
@@ -16,17 +17,17 @@ pub use unist::{Point, Position};
1617
/// A span within the source document.
1718
///
1819
/// Use [`Locator`] to convert a `Span` to a [`Position`].
19-
#[derive(
20-
Copy, Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord, Deserialize, Serialize,
21-
)]
20+
#[derive(Copy, Clone, Debug, Default, Hash, PartialEq, Eq, PartialOrd, Ord)]
21+
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
2222
pub struct Span {
2323
/// The start offset of the span.
2424
pub start: usize,
2525
/// The end offset of the span.
2626
pub end: usize,
2727
}
2828

29-
#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq, Serialize)]
29+
#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
30+
#[cfg_attr(feature = "serde", derive(Serialize))]
3031
pub(crate) struct Spanned<T> {
3132
pub span: Span,
3233
pub value: T,

src/span/unist.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use std::ops::Range;
22

3+
#[cfg(feature = "serde")]
34
use serde::{Deserialize, Serialize};
45

56
use crate::span::Ranged;
@@ -8,14 +9,16 @@ use crate::span::Ranged;
89
///
910
/// Like [`Span`](crate::span::Span), `Position` represents a span within the source document.
1011
/// `Position` also includes line and column information.
11-
#[derive(Copy, Clone, Debug, Default, Eq, Ord, PartialEq, PartialOrd, Deserialize, Serialize)]
12+
#[derive(Copy, Clone, Debug, Default, Eq, Ord, PartialEq, PartialOrd)]
13+
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
1214
pub struct Position {
1315
pub start: Point,
1416
pub end: Point,
1517
}
1618

1719
/// A unist [Point](https://github.com/syntax-tree/unist/tree/3.0.0?tab=readme-ov-file#point).
18-
#[derive(Copy, Clone, Debug, Default, Eq, Ord, PartialEq, PartialOrd, Deserialize, Serialize)]
20+
#[derive(Copy, Clone, Debug, Default, Eq, Ord, PartialEq, PartialOrd)]
21+
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
1922
pub struct Point {
2023
pub line: usize,
2124
pub column: usize,

0 commit comments

Comments
 (0)