obsidian_parser/note/
note_default.rs

1//! Impl trait [`NoteDefault`]
2
3use serde::de::DeserializeOwned;
4
5use super::{DefaultProperties, Note};
6use crate::note::{NoteFromReader, NoteFromString};
7use std::{io::Read, path::Path};
8
9/// Default implementation using [`std::collections::HashMap`] for properties
10///
11/// Automatically implemented for all `Note<Properties = HashMap<..>>` types.
12/// Provides identical interface with explicitly named methods.
13pub trait NoteDefault: Note {
14    /// Same as [`NoteFromString::from_string`] with default properties type
15    fn from_string_default(raw_text: impl AsRef<str>) -> Result<Self, Self::Error>
16    where
17        Self: NoteFromString,
18        Self::Properties: DeserializeOwned;
19
20    /// Same as [`crate::note::NoteFromFile::from_file`] with default properties type
21    #[cfg(not(target_family = "wasm"))]
22    fn from_file_default(path: impl AsRef<Path>) -> Result<Self, Self::Error>
23    where
24        Self: crate::prelude::NoteFromFile,
25        Self::Properties: DeserializeOwned,
26        Self::Error: From<std::io::Error>;
27
28    /// Same as [`NoteFromReader::from_reader`] with default properties type
29    fn from_reader_default(reader: &mut impl Read) -> Result<Self, Self::Error>
30    where
31        Self: NoteFromReader,
32        Self::Properties: DeserializeOwned,
33        Self::Error: From<std::io::Error>;
34}
35
36impl<T> NoteDefault for T
37where
38    T: Note<Properties = DefaultProperties>,
39{
40    fn from_string_default(raw_text: impl AsRef<str>) -> Result<Self, Self::Error>
41    where
42        Self: NoteFromString,
43        Self::Properties: DeserializeOwned,
44    {
45        Self::from_string(raw_text)
46    }
47
48    #[cfg(not(target_family = "wasm"))]
49    fn from_file_default(path: impl AsRef<Path>) -> Result<Self, Self::Error>
50    where
51        Self: crate::prelude::NoteFromFile,
52        Self::Properties: DeserializeOwned,
53        Self::Error: From<std::io::Error>,
54    {
55        Self::from_file(path)
56    }
57
58    fn from_reader_default(reader: &mut impl Read) -> Result<Self, Self::Error>
59    where
60        Self: NoteFromReader,
61        Self::Properties: DeserializeOwned,
62        Self::Error: From<std::io::Error>,
63    {
64        Self::from_reader(reader)
65    }
66}