summaryrefslogtreecommitdiff
path: root/src/embedded.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/embedded.rs')
-rw-r--r--src/embedded.rs51
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);
+ }
+}