Skip to content

Commit 5e1c7b2

Browse files
authored
Merge pull request #156 from Muscraft/update-toml
Update toml to 0.8.0
2 parents cc8ee29 + 58425bf commit 5e1c7b2

File tree

4 files changed

+99
-77
lines changed

4 files changed

+99
-77
lines changed

Diff for: Cargo.lock

+67-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ divan = "0.1.14"
127127
glob = "0.3.1"
128128
serde = { version = "1.0.199", features = ["derive"] }
129129
snapbox = { version = "0.6.0", features = ["diff", "term-svg", "cmd", "examples"] }
130-
toml = "0.5.11"
130+
toml = "0.8.0"
131131
tryfn = "0.2.1"
132132

133133
[[bench]]

Diff for: tests/fixtures/deserialize.rs

+27-72
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,30 @@
1-
use serde::{Deserialize, Deserializer, Serialize};
1+
use serde::Deserialize;
22
use std::ops::Range;
33

44
use annotate_snippets::renderer::DEFAULT_TERM_WIDTH;
55
use annotate_snippets::{Annotation, Level, Message, Renderer, Snippet};
66

77
#[derive(Deserialize)]
8-
pub(crate) struct Fixture<'a> {
8+
pub(crate) struct Fixture {
99
#[serde(default)]
1010
pub(crate) renderer: RendererDef,
11-
#[serde(borrow)]
12-
pub(crate) message: MessageDef<'a>,
11+
pub(crate) message: MessageDef,
1312
}
1413

1514
#[derive(Deserialize)]
16-
pub struct MessageDef<'a> {
15+
pub struct MessageDef {
1716
#[serde(with = "LevelDef")]
1817
pub level: Level,
19-
#[serde(borrow)]
20-
pub title: &'a str,
18+
pub title: String,
2119
#[serde(default)]
22-
#[serde(borrow)]
23-
pub id: Option<&'a str>,
20+
pub id: Option<String>,
2421
#[serde(default)]
25-
#[serde(borrow)]
26-
pub footer: Vec<MessageDef<'a>>,
27-
#[serde(deserialize_with = "deserialize_snippets")]
28-
#[serde(borrow)]
29-
pub snippets: Vec<Snippet<'a>>,
22+
pub footer: Vec<MessageDef>,
23+
pub snippets: Vec<SnippetDef>,
3024
}
3125

32-
impl<'a> From<MessageDef<'a>> for Message<'a> {
33-
fn from(val: MessageDef<'a>) -> Self {
26+
impl<'a> From<&'a MessageDef> for Message<'a> {
27+
fn from(val: &'a MessageDef) -> Self {
3428
let MessageDef {
3529
level,
3630
title,
@@ -42,100 +36,61 @@ impl<'a> From<MessageDef<'a>> for Message<'a> {
4236
if let Some(id) = id {
4337
message = message.id(id);
4438
}
45-
message = message.snippets(snippets);
46-
message = message.footers(footer.into_iter().map(Into::into));
39+
message = message.snippets(snippets.iter().map(Snippet::from));
40+
message = message.footers(footer.iter().map(Into::into));
4741
message
4842
}
4943
}
5044

51-
fn deserialize_snippets<'de, D>(deserializer: D) -> Result<Vec<Snippet<'de>>, D::Error>
52-
where
53-
D: Deserializer<'de>,
54-
{
55-
#[derive(Deserialize)]
56-
struct Wrapper<'a>(
57-
#[serde(with = "SnippetDef")]
58-
#[serde(borrow)]
59-
SnippetDef<'a>,
60-
);
61-
62-
let v = Vec::deserialize(deserializer)?;
63-
Ok(v.into_iter().map(|Wrapper(a)| a.into()).collect())
64-
}
65-
6645
#[derive(Deserialize)]
67-
pub struct SnippetDef<'a> {
68-
#[serde(borrow)]
69-
pub source: &'a str,
46+
pub struct SnippetDef {
47+
pub source: String,
7048
pub line_start: usize,
71-
#[serde(borrow)]
72-
pub origin: Option<&'a str>,
73-
#[serde(deserialize_with = "deserialize_annotations")]
74-
#[serde(borrow)]
75-
pub annotations: Vec<Annotation<'a>>,
49+
pub origin: Option<String>,
50+
pub annotations: Vec<AnnotationDef>,
7651
#[serde(default)]
7752
pub fold: bool,
7853
}
7954

80-
impl<'a> From<SnippetDef<'a>> for Snippet<'a> {
81-
fn from(val: SnippetDef<'a>) -> Self {
55+
impl<'a> From<&'a SnippetDef> for Snippet<'a> {
56+
fn from(val: &'a SnippetDef) -> Self {
8257
let SnippetDef {
8358
source,
8459
line_start,
8560
origin,
8661
annotations,
8762
fold,
8863
} = val;
89-
let mut snippet = Snippet::source(source).line_start(line_start).fold(fold);
64+
let mut snippet = Snippet::source(source).line_start(*line_start).fold(*fold);
9065
if let Some(origin) = origin {
9166
snippet = snippet.origin(origin);
9267
}
93-
snippet = snippet.annotations(annotations);
68+
snippet = snippet.annotations(annotations.iter().map(Into::into));
9469
snippet
9570
}
9671
}
9772

98-
fn deserialize_annotations<'de, D>(deserializer: D) -> Result<Vec<Annotation<'de>>, D::Error>
99-
where
100-
D: Deserializer<'de>,
101-
{
102-
#[derive(Deserialize)]
103-
struct Wrapper<'a>(#[serde(borrow)] AnnotationDef<'a>);
104-
105-
let v = Vec::deserialize(deserializer)?;
106-
Ok(v.into_iter().map(|Wrapper(a)| a.into()).collect())
107-
}
108-
109-
#[derive(Serialize, Deserialize)]
110-
pub struct AnnotationDef<'a> {
73+
#[derive(Deserialize)]
74+
pub struct AnnotationDef {
11175
pub range: Range<usize>,
112-
#[serde(borrow)]
113-
pub label: &'a str,
76+
pub label: String,
11477
#[serde(with = "LevelDef")]
11578
pub level: Level,
11679
}
11780

118-
impl<'a> From<AnnotationDef<'a>> for Annotation<'a> {
119-
fn from(val: AnnotationDef<'a>) -> Self {
81+
impl<'a> From<&'a AnnotationDef> for Annotation<'a> {
82+
fn from(val: &'a AnnotationDef) -> Self {
12083
let AnnotationDef {
12184
range,
12285
label,
12386
level,
12487
} = val;
125-
level.span(range).label(label)
88+
level.span(range.start..range.end).label(label)
12689
}
12790
}
12891

129-
#[derive(Serialize, Deserialize)]
130-
pub(crate) struct LabelDef<'a> {
131-
#[serde(with = "LevelDef")]
132-
pub(crate) level: Level,
133-
#[serde(borrow)]
134-
pub(crate) label: &'a str,
135-
}
136-
13792
#[allow(dead_code)]
138-
#[derive(Serialize, Deserialize)]
93+
#[derive(Deserialize)]
13994
#[serde(remote = "Level")]
14095
enum LevelDef {
14196
Error,

Diff for: tests/fixtures/main.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,10 @@ fn setup(input_path: std::path::PathBuf) -> tryfn::Case {
3333

3434
fn test(input_path: &std::path::Path) -> Result<Data, Box<dyn Error>> {
3535
let src = std::fs::read_to_string(input_path)?;
36-
let (renderer, message): (Renderer, Message<'_>) =
37-
toml::from_str(&src).map(|a: Fixture<'_>| (a.renderer.into(), a.message.into()))?;
36+
let fixture: Fixture = toml::from_str(&src)?;
37+
let renderer: Renderer = fixture.renderer.into();
38+
let message: Message<'_> = (&fixture.message).into();
39+
3840
let actual = renderer.render(message).to_string();
3941
Ok(Data::from(actual).coerce_to(DataFormat::TermSvg))
4042
}

0 commit comments

Comments
 (0)