1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
#![crate_name = "streamson_lib"] //! This library is able to process large JSON data. //! //! It can have various matchers which matches the path (see [matcher](matcher/index.html)) //! //! And various handlers to do something with found data (see [handlers](handler/index.html)) //! //! # Examples //! ``` //! use streamson_lib::{handler::{self, Handler}, matcher, strategy}; //! use std::sync::{Arc, Mutex}; //! //! let file_handler = Arc::new( //! Mutex::new(handler::File::new("/tmp/out.txt").unwrap()) //! ); //! let stdout_handler = Arc::new(Mutex::new(handler::PrintLn::new())); //! //! let first_matcher = matcher::Simple::new(r#"{"users"}[]"#).unwrap(); //! let second_matcher = matcher::Simple::new(r#"{"groups"}[]"#).unwrap(); //! //! let mut trigger = strategy::Trigger::new(); //! //! // exports users to stdout and /tmp/out.txt //! trigger.add_matcher( //! Box::new(first_matcher), //! &[stdout_handler.clone(), file_handler], //! ); //! //! // groups are going to be expoted only to stdout //! trigger.add_matcher( //! Box::new(second_matcher), //! &[stdout_handler], //! ); //! //! for input in vec![ //! br#"{"users": [1,2]"#.to_vec(), //! br#", "groups": [3, 4]}"#.to_vec(), //! ] { //! trigger.process(&input).unwrap(); //! } //! ``` //! //! ``` //! use streamson_lib::{handler::{self, Handler}, matcher, strategy}; //! use std::sync::{Arc, Mutex}; //! //! let file_handler = Arc::new( //! Mutex::new(handler::File::new("/tmp/out.txt").unwrap()) //! ); //! let stdout_handler = Arc::new(Mutex::new(handler::PrintLn::new())); //! //! let first_matcher = matcher::Depth::new(1, Some(2)); //! let second_matcher = matcher::Simple::new(r#"{"users"}[]"#).unwrap(); //! let matcher = matcher::Combinator::new(first_matcher) | //! matcher::Combinator::new(second_matcher); //! //! let mut trigger = strategy::Trigger::new(); //! //! // Paths with depths 1, 2 are exported to tmp.txt //! trigger.add_matcher( //! Box::new(matcher), //! &[stdout_handler.clone(), file_handler], //! ); //! //! for input in vec![ //! br#"{"users": [1,2]"#.to_vec(), //! br#", "groups": [3, 4]}"#.to_vec(), //! ] { //! trigger.process(&input).unwrap(); //! } //! ``` //! //! ``` //! use streamson_lib::{handler::{self, Handler}, matcher, strategy}; //! use std::sync::{Arc, Mutex}; //! //! let file_handler = Arc::new( //! Mutex::new(handler::File::new("/tmp/out.txt").unwrap()) //! ); //! let stdout_handler = Arc::new(Mutex::new(handler::PrintLn::new())); //! //! let matcher = matcher::Depth::new(1, Some(2)); //! //! let mut trigger = strategy::Trigger::new(); //! //! // Paths with depths 1, 2 are exported to tmp.txt //! trigger.add_matcher( //! Box::new(matcher), //! &[stdout_handler.clone(), file_handler], //! ); //! //! for input in vec![ //! br#"{"users": [1,2]"#.to_vec(), //! br#", "groups": [3, 4]}"#.to_vec(), //! ] { //! trigger.process(&input).unwrap(); //! } //! ``` pub mod error; pub mod handler; pub mod matcher; pub mod path; pub mod strategy; pub mod streamer; pub use handler::Handler; pub use path::Path; pub use streamer::{Output, Streamer};