sdoc/commands/
view.rs
1use workflow::Work;
2use workflow::Instruction::{Display, ExitCode};
3use model::Value;
4use dto::{Request, Response};
5use config::Context;
6use std::fs::File;
7use std::io::prelude::*;
8
9pub fn execute(request: Request, context: &Context) -> Work {
10 Work::instruction(
11 request.next()
12 .current
13 .and_then(|rc| context.find(&rc, true))
14 .map(|command| {
15 if let Some(ref a) = command.value {
16 return match *a {
17 Value::Script(ref b) => {
18 let file_path = context.directory.join(b);
19 let mut file = File::open(&file_path).unwrap();
20 let mut content = s!();
21 file.read_to_string(&mut content).unwrap();
22
23 Display(format!("{}", content), Response::Ok)
24 }
25 Value::Shell(ref b) => Display(format!("{}", b), Response::Ok),
26 _ => ExitCode(Response::Err(1))
27 }
28 }
29 ExitCode(Response::Err(1))
30 })
31 .unwrap_or_else(|| ExitCode(Response::Err(1))))
32}
33
34pub fn auto_complete(request: Request, context: &Context) -> Work {
35 Work::instruction(
36 request.next()
37 .current
38 .and_then(|rc| context.find(&rc, false))
39 .map(|_| ExitCode(Response::Ok))
40 .unwrap_or_else(|| {
41 let s = format!("{}", context.get_commands().iter()
42 .filter(|c| {
43 if let Some(ref a) = c.value {
44 return match *a {
45 Value::Script(_) => true,
46 Value::Shell(_) => true,
47 _ => false
48 }
49 }
50 false
51 })
52 .fold(s!(), |a, b| format!("{}{}\n", a, &b.name)));
53
54 Display(s, Response::Ok)
55 }))
56}