|
10 | 10 | //! * transitions can have multiple end states if needed (conditions depending on message content, etc) |
11 | 11 | //! * accessors can be generated for state members |
12 | 12 | //! * wrapper methods and accessors are generated on the parent enum |
13 | | -//! * the generated code is also written in the `target/` directory for further inspection |
14 | | -//! * a dot file is written in the `target/` directory for graph generation |
| 13 | +//! * the generated code is also written in the `target/machine` directory for further inspection |
| 14 | +//! * a dot file is written in the `target/machine` directory for graph generation |
15 | 15 | //! |
16 | 16 | //! ## Usage |
17 | 17 | //! |
|
248 | 248 | //! } |
249 | 249 | //! ``` |
250 | 250 | //! |
251 | | -//! The complete generated code can be found in `target/traffic.rs`. |
| 251 | +//! The complete generated code can be found in `target/machine/traffic.rs`. |
252 | 252 | //! |
253 | | -//! The machine crate will also generate the `target/traffic.dot` file |
| 253 | +//! The machine crate will also generate the `target/machine/traffic.dot` file |
254 | 254 | //! for graphviz usage: |
255 | 255 | //! |
256 | 256 | //! ```dot |
|
263 | 263 | //! } |
264 | 264 | //! ``` |
265 | 265 | //! |
266 | | -//! `dot -Tpng target/traffic.dot > traffic.png` will generate the following image: |
| 266 | +//! `dot -Tpng target/machine/traffic.dot > traffic.png` will generate the following image: |
267 | 267 | //! |
268 | 268 | //!  |
269 | 269 | //! |
@@ -409,7 +409,7 @@ extern crate syn; |
409 | 409 | extern crate quote; |
410 | 410 |
|
411 | 411 | use std::collections::HashMap; |
412 | | -use std::fs::{File, OpenOptions}; |
| 412 | +use std::fs::{File, OpenOptions, create_dir}; |
413 | 413 | use std::io::{Seek, Write}; |
414 | 414 |
|
415 | 415 | use case::CaseExt; |
@@ -443,7 +443,8 @@ pub fn machine(input: proc_macro::TokenStream) -> syn::export::TokenStream { |
443 | 443 |
|
444 | 444 | trace!("generated: {}", gen); |
445 | 445 |
|
446 | | - let file_name = format!("target/{}.rs", name.to_string().to_lowercase()); |
| 446 | + let file_name = format!("target/machine/{}.rs", name.to_string().to_lowercase()); |
| 447 | + let _ = create_dir("target/machine"); |
447 | 448 | File::create(&file_name) |
448 | 449 | .and_then(|mut file| { |
449 | 450 | file.seek(std::io::SeekFrom::End(0))?; |
@@ -645,9 +646,10 @@ impl Parse for Transition { |
645 | 646 | impl Transitions { |
646 | 647 | pub fn render(&self) { |
647 | 648 | let file_name = format!( |
648 | | - "target/{}.dot", |
| 649 | + "target/machine/{}.dot", |
649 | 650 | self.machine_name.to_string().to_lowercase() |
650 | 651 | ); |
| 652 | + let _ = create_dir("target/machine"); |
651 | 653 | let mut file = File::create(&file_name).expect("error opening dot file"); |
652 | 654 |
|
653 | 655 | file.write_all(format!("digraph {} {{\n", self.machine_name.to_string()).as_bytes()) |
@@ -775,7 +777,8 @@ pub fn transitions(input: proc_macro::TokenStream) -> syn::export::TokenStream { |
775 | 777 |
|
776 | 778 | //println!("generated: {:?}", gen); |
777 | 779 | trace!("generated transitions: {}", stream); |
778 | | - let file_name = format!("target/{}.rs", machine_name.to_string().to_lowercase()); |
| 780 | + let _ = create_dir("target/machine"); |
| 781 | + let file_name = format!("target/machine/{}.rs", machine_name.to_string().to_lowercase()); |
779 | 782 | OpenOptions::new() |
780 | 783 | .create(true) |
781 | 784 | .write(true) |
@@ -986,7 +989,8 @@ pub fn methods(input: proc_macro::TokenStream) -> syn::export::TokenStream { |
986 | 989 |
|
987 | 990 | stream.extend(proc_macro::TokenStream::from(toks)); |
988 | 991 |
|
989 | | - let file_name = format!("target/{}.rs", machine_name.to_string().to_lowercase()); |
| 992 | + let file_name = format!("target/machine/{}.rs", machine_name.to_string().to_lowercase()); |
| 993 | + let _ = create_dir("target/machine"); |
990 | 994 | OpenOptions::new() |
991 | 995 | .create(true) |
992 | 996 | .write(true) |
|
0 commit comments