apache_echarts_wrapper/
lib.rs1pub mod options;
2mod builder;
3pub mod templates;
4pub mod common;
5
6pub use builder::{
7 ChartBuilder,
8 RegressionChartBuilder,
9};
10
11#[cfg(test)]
12mod tests {
13 use crate::builder::{ChartBuilder, RegressionChartBuilder};
14 use crate::options::{EChartsOption, SeriesType};
15 use crate::templates::OnePage;
16 use sailfish::TemplateSimple;
17 use std::net::TcpListener;
18 use std::thread;
19 use std::time::Duration;
20 use tiny_http::{Header, Server};
21 use crate::common::Size;
22
23 #[test]
24 fn it_works() {
25 let chart = EChartsOption::<f64, &str>::new()
26 .title_str("Something interesting")
27 .add_series(
28 SeriesType::Line,
29 "fist_set",
30 vec![(12.5,"First"),(14.0,"Second"),(15.0,"Third"),(10.0,"Fourth")]
31 )
32 .add_series(
33 SeriesType::Line,
34 "second_set",
35 vec![(2.0,"First"),(14.0,"Third"),(15.0,"Third"),(20.0,"First")]
36 )
37 .build(Size::pixels(600),Size::pixels(400));
38
39 let numeric_chart = EChartsOption::<f64, f64>::new()
40 .title_str("Something completely different")
41 .add_linear_regression_series(
42 "regression set2",
43 vec![
44 (1.0,1.0),
45 (1.0,2.0),
46 (3.5,3.0),
47 (4.0,4.0),
48 (4.1,1.0),
49 (4.1,3.0),
50 (5.0,4.0),
51 (14.0,3.0),
52 (15.0,1.0),
53 (20.0,1.0)
54 ]
55 )
56 .add_linear_regression_series(
57 "regression set",
58 vec![
59 (1.0,11.0),
60 (1.0,20.0),
61 (3.5,30.0),
62 (4.0,40.0),
63 (4.1,11.0),
64 (4.1,35.0),
65 (5.0,40.0),
66 (14.0,33.0),
67 (15.0,31.0),
68 (20.0,11.0)
69 ]
70 ) .build(Size::pixels(600),Size::pixels(400));
71
72 let mut body = chart.render_once().unwrap();
73 body.push_str(numeric_chart.render_once().unwrap().as_str());
74 let html = OnePage::new("Test",body.as_str()).render_once().unwrap();
76
77 let listener = TcpListener::bind("127.0.0.1:0").unwrap(); let addr = listener.local_addr().unwrap();
80 let server = Server::from_listener(listener,None).unwrap();
81
82 let url = format!("http://{}", addr);
84 println!("Serving at {}", url);
85 let _ = open::that(&url); thread::spawn(move || {
88 for request in server.incoming_requests() {
89 let response = tiny_http::Response::from_string(html.clone())
90 .with_header("Content-Type: text/html".parse::<Header>().unwrap());
91 let _ = request.respond(response);
92 }
93 });
94
95 thread::sleep(Duration::from_secs(5));
97 }
98}