diff options
author | Valentin Popov <info@valentineus.link> | 2020-05-11 02:48:24 +0300 |
---|---|---|
committer | Valentin Popov <info@valentineus.link> | 2020-05-11 02:48:24 +0300 |
commit | 4477267905374f88d5992f7d1ea7c6a69e4d4c3a (patch) | |
tree | 615234ac365c546a8aa1c827d39b409735a0c150 | |
parent | 7f9f743f6a0a899a5c045ebbe0911a8f89056909 (diff) | |
download | bbb2json-release/v0.2.0.tar.xz bbb2json-release/v0.2.0.zip |
Генератор списка файлов "events.xml"release/v0.2.0
-rw-r--r-- | Cargo.toml | 8 | ||||
-rw-r--r-- | src/cli/en.yml | 10 | ||||
-rw-r--r-- | src/main.rs | 39 | ||||
-rw-r--r-- | src/parser.rs | 60 |
4 files changed, 17 insertions, 100 deletions
@@ -2,11 +2,7 @@ authors = [ "Valentin Popov <info@valentineus.link>" ] edition = "2018" name = "bbb2json" -version = "0.1.0" +version = "0.2.0" [dependencies] -clap = { version = "2.32.0", features = [ "yaml" ] } -serde = "1.0.85" -serde_derive = "1.0.85" -serde_json = "1.0.37" -xml-rs = "0.8.0"
\ No newline at end of file +walkdir = "2.3.1" diff --git a/src/cli/en.yml b/src/cli/en.yml deleted file mode 100644 index 5dbc625..0000000 --- a/src/cli/en.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: "bbb2json" -version: "0.1.0" -author: "Valentin Popov <info@valentineus.link>" -about: "BigBlueButton records analyzer. Displays basic recording information." - -args: - - FILE: - help: "The path to a file 'events.xml'." - index: 1 - required: true
\ No newline at end of file diff --git a/src/main.rs b/src/main.rs index dbf0f28..f30f834 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,31 +1,22 @@ -#[macro_use] -extern crate serde_derive; -extern crate serde_json; +use walkdir::WalkDir; -extern crate clap; -extern crate xml; +/// Создание списка "events.xml" файлов. +fn get_list(root: &str) -> Vec<String> { + let mut array: Vec<String> = vec![]; -use std::fs::File; -use std::io::BufReader; -use std::path::Path; + for entry in WalkDir::new(root) { + let path = entry.unwrap().path().display().to_string(); -use clap::{load_yaml, App}; + if path.contains("events.xml") { + array.push(path); + } + } -mod parser; -use parser::*; + return array; +} fn main() { - let yaml = load_yaml!("cli/en.yml"); - let matches = App::from_yaml(yaml).get_matches(); - - let path = matches.value_of("FILE").unwrap(); - - match Path::new(path).exists() { - true => { - let file: File = File::open(path).unwrap(); - let data: ParserResult = parser(BufReader::new(file)); - println!("{}", serde_json::to_string_pretty(&data).unwrap()); - } - _ => panic!("File {:#?} does not exist or is not available.", path), - }; + let root = "tests"; + let list = get_list(root); + dbg!(list); } diff --git a/src/parser.rs b/src/parser.rs deleted file mode 100644 index 1c862c4..0000000 --- a/src/parser.rs +++ /dev/null @@ -1,60 +0,0 @@ -use std::fs::File; -use std::io::BufReader; - -use serde_json::Value; -use xml::reader::{EventReader, XmlEvent}; - -#[derive(Serialize)] -pub struct ParserResult { - pub context: Value, - pub external_id: String, - pub meeting_id: String, - pub meeting_name: String, - pub meeting_url: String, -} - -pub fn parser(content: BufReader<File>) -> ParserResult { - let mut data = ParserResult { - context: serde_json::from_str("{}").unwrap(), - external_id: "".to_string(), - meeting_id: "".to_string(), - meeting_name: "".to_string(), - meeting_url: "".to_string(), - }; - - for element in EventReader::new(content) { - match element { - Ok(XmlEvent::StartElement { - name, attributes, .. - }) => { - let el_name = name.local_name.to_string(); - - for attribute in attributes { - let attr_name: String = attribute.name.local_name.to_string(); - let attr_value: String = attribute.value.to_string(); - - if el_name == "metadata" && attr_name == "bn-recording-status" { - data.context = serde_json::from_str(&attr_value).unwrap(); - } - - if el_name == "metadata" && attr_name == "meetingId" { - data.external_id = attr_value.clone(); - } - - if el_name == "recording" && attr_name == "meeting_id" { - data.meeting_id = attr_value.clone(); - data.meeting_url = format!("{}{}", "https://bbb.styleschool.ru/playback/presentation/0.9.0/playback.html?meetingId=", attr_value); - } - - if el_name == "metadata" && attr_name == "meetingName" { - data.meeting_name = attr_value.clone(); - } - } - } - Err(error) => panic!(error), - _ => {} - } - } - - return data; -} |