diff --git a/.gitignore b/.gitignore index 088ba6ba..f2e972dd 100644 --- a/.gitignore +++ b/.gitignore @@ -2,9 +2,5 @@ # will have compiled files and executables /target/ -# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries -# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html -Cargo.lock - # These are backup files generated by rustfmt **/*.rs.bk diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 00000000..0bea58c6 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,121 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "ffplayout-engine-rs" +version = "0.1.0" +dependencies = [ + "serde", + "serde_yaml", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" + +[[package]] +name = "indexmap" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223" +dependencies = [ + "autocfg", + "hashbrown", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" + +[[package]] +name = "proc-macro2" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quote" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "ryu" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" + +[[package]] +name = "serde" +version = "1.0.136" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.136" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_yaml" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a521f2940385c165a24ee286aa8599633d162077a54bdcae2a6fd5a7bfa7a0" +dependencies = [ + "indexmap", + "ryu", + "serde", + "yaml-rust", +] + +[[package]] +name = "syn" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" + +[[package]] +name = "yaml-rust" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +dependencies = [ + "linked-hash-map", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 00000000..39230123 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,18 @@ +# cargo-features = ["strip"] + +[package] +name = "ffplayout-engine-rs" +version = "0.1.0" +edition = "2021" + +[dependencies] +serde = { version = "1.0", features = ["derive"] } +serde_yaml = "0.8" + +[[bin]] +name = "ffplayout" +path = "src/main.rs" + +[profile.release] +# strip = true +lto = true diff --git a/ffplayout.yml b/ffplayout.yml new file mode 100644 index 00000000..32efc2e7 --- /dev/null +++ b/ffplayout.yml @@ -0,0 +1,20 @@ +general: + helptext: Sometimes it can happen, that a file is corrupt but still playable, + this can produce an streaming error over all following files. The only way + in this case is, to stop ffplayout and start it again. Here we only say when + it stops, the starting process is in your hand. Best way is a systemd service + on linux. 'stop_threshold' stop ffplayout, if it is async in time above this + value. A number below 3 can cause unexpected errors. + stop_threshold: 11 + +mail: + helptext: Send error messages to email address, like missing playlist; invalid + json format; missing clip path. Leave recipient blank, if you don't need this. + 'mail_level' can be WARNING or ERROR. + subject: Playout Error + smtp_server: mail.example.org + smtp_port: 587 + sender_addr: ffplayout@example.org + sender_pass: abc123 + recipient: null + mail_level: ERROR diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 00000000..3a3ccf23 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,7 @@ +mod utils; + +fn main() { + let config = utils::read_yaml(); + println!("{:#?}", config); + //println!("{:?}", config.general.stop_threshold); +} diff --git a/src/utils.rs b/src/utils.rs new file mode 100644 index 00000000..91163c09 --- /dev/null +++ b/src/utils.rs @@ -0,0 +1,33 @@ +use serde::{Deserialize, Serialize}; +use serde_yaml::{self}; + +#[derive(Debug, Serialize, Deserialize)] +pub struct Config { + pub general: General, + pub mail: Mail, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct General { + pub helptext: String, + pub stop_threshold: u32, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct Mail { + pub helptext: String, + pub subject: String, + pub smtp_server: String, + pub smtp_port: u32, + pub sender_addr: String, + pub sender_pass: String, + pub recipient: String, + pub mail_level: String, +} + +pub fn read_yaml() -> Config { + let f = std::fs::File::open("ffplayout.yml").expect("Could not open file."); + let config: Config = serde_yaml::from_reader(f).expect("Could not read values."); + + config +}