@@ -2,55 +2,40 @@ use std::env;
22use std:: fs:: File ;
33use std:: io:: { Write , Error } ;
44
5+ // use crate::internal::noop_handler::NoOpHandler;
56use crate :: internal:: { LibHandler } ;
67
78const LOCAL_OUTPUT : & str = "ANTITHESIS_SDK_LOCAL_OUTPUT" ;
89
910pub struct LocalHandler {
10- maybe_writer : Option < File >
11+ writer : File
1112}
1213
1314impl LocalHandler {
14- pub fn new ( ) -> Self {
15- let filename = match env:: var ( LOCAL_OUTPUT ) {
16- Err ( _) => return LocalHandler { maybe_writer : None } ,
17- Ok ( s) => s
18- } ;
15+ pub fn new ( ) -> Option < Self > {
16+ let filename = env:: var ( LOCAL_OUTPUT ) . ok ( ) ?;
1917
2018 let create_result = File :: create ( & filename) ;
21- if let Ok ( f) = create_result {
22- // Disabling buffering by setting capacity to 0 for now
23- // Inefficient, but ensures that no buffered bytes are abandoned
24- // for a LocalHandler instance that does not get Drop'ed
25- // Seems like LocalHandler gets bound to a reference with
26- // a 'static lifetime.
27- LocalHandler {
28- maybe_writer : Some ( f)
29- }
19+ if let Ok ( writer) = create_result {
20+ Some ( LocalHandler { writer } )
3021 } else {
31- eprintln ! ( "Unable to write to '{}' - {}" , filename. as_str( ) , create_result. unwrap_err( ) ) ;
32- LocalHandler {
33- maybe_writer : None
34- }
22+ eprintln ! ( "Unable to write to '{}' - {}" , filename. as_str( ) , create_result. unwrap_err( ) ) ;
23+ None
3524 }
3625 }
3726}
3827
3928impl LibHandler for LocalHandler {
29+
4030 fn output ( & self , value : & str ) -> Result < ( ) , Error > {
41- match & self . maybe_writer {
42- Some ( writer_ref) => {
43- let mut writer_mut = writer_ref;
44- // The compact Display impl (selected using `{}`) of `serde_json::Value` contains no newlines,
45- // hence we are outputing valid JSONL format here.
46- // Using the `{:#}` format specifier may results in extra newlines and indentation.
47- // See https://docs.rs/serde_json/latest/serde_json/enum.Value.html#impl-Display-for-Value.
48- writeln ! ( writer_mut, "{}" , value) ?;
49- writer_mut. flush ( ) ?;
50- Ok ( ( ) )
51- } ,
52- None => Ok ( ( ) )
53- }
31+ // The compact Display impl (selected using `{}`) of `serde_json::Value` contains no newlines,
32+ // hence we are outputing valid JSONL format here.
33+ // Using the `{:#}` format specifier may results in extra newlines and indentation.
34+ // See https://docs.rs/serde_json/latest/serde_json/enum.Value.html#impl-Display-for-Value.
35+ let mut writer_mut = & self . writer ;
36+ writeln ! ( writer_mut, "{}" , value) ?;
37+ writer_mut. flush ( ) ?;
38+ Ok ( ( ) )
5439 }
5540
5641 fn random ( & self ) -> u64 {
0 commit comments