diff options
author | Daniel Silverstone <dsilvers+gitlab@digital-scurf.org> | 2022-09-03 09:45:23 +0000 |
---|---|---|
committer | Daniel Silverstone <dsilvers+gitlab@digital-scurf.org> | 2022-09-03 09:45:23 +0000 |
commit | da1aea95d5304ac5dd8c4658acf5bd3efaee0fa8 (patch) | |
tree | 676130f43ff2270f2f2ef116cc927214a67983ad /src/embedded.rs | |
parent | 404006dfb651687713b7b8aa3183ed5c2fbe8acb (diff) | |
parent | c4b98e69050a94cac865af4d5f92985b9e5262b3 (diff) | |
download | subplot-da1aea95d5304ac5dd8c4658acf5bd3efaee0fa8.tar.gz |
Merge branch 'liw/refactor' into 'main'
Refactoring ready for YAML-from-separate-file
See merge request subplot/subplot!286
Diffstat (limited to 'src/embedded.rs')
-rw-r--r-- | src/embedded.rs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/embedded.rs b/src/embedded.rs new file mode 100644 index 0000000..c868054 --- /dev/null +++ b/src/embedded.rs @@ -0,0 +1,51 @@ +use pandoc_ast::{MutVisitor, Pandoc}; +use serde::{Deserialize, Serialize}; + +/// A data file embedded in the document. +#[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)] +pub struct EmbeddedFile { + filename: String, + contents: String, +} + +impl EmbeddedFile { + /// Create a new data file, with a name and contents. + pub fn new(filename: String, contents: String) -> EmbeddedFile { + EmbeddedFile { filename, contents } + } + + /// Return name of embedded file. + pub fn filename(&self) -> &str { + &self.filename + } + + /// Return contents of embedded file. + pub fn contents(&self) -> &str { + &self.contents + } +} + +/// A collection of data files embedded in document. +#[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)] +pub struct EmbeddedFiles { + files: Vec<EmbeddedFile>, +} + +impl EmbeddedFiles { + /// Create new set of data files. + pub fn new(ast: &mut Pandoc) -> EmbeddedFiles { + let mut files = EmbeddedFiles { files: vec![] }; + files.walk_pandoc(ast); + files + } + + /// Return slice of all data files. + pub fn files(&self) -> &[EmbeddedFile] { + &self.files + } + + /// Append a new data file. + pub fn push(&mut self, file: EmbeddedFile) { + self.files.push(file); + } +} |