@@ -2,55 +2,40 @@ use std::env;
2
2
use std:: fs:: File ;
3
3
use std:: io:: { Write , Error } ;
4
4
5
+ // use crate::internal::noop_handler::NoOpHandler;
5
6
use crate :: internal:: { LibHandler } ;
6
7
7
8
const LOCAL_OUTPUT : & str = "ANTITHESIS_SDK_LOCAL_OUTPUT" ;
8
9
9
10
pub struct LocalHandler {
10
- maybe_writer : Option < File >
11
+ writer : File
11
12
}
12
13
13
14
impl 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 ( ) ?;
19
17
20
18
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 } )
30
21
} 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
35
24
}
36
25
}
37
26
}
38
27
39
28
impl LibHandler for LocalHandler {
29
+
40
30
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 ( ( ) )
54
39
}
55
40
56
41
fn random ( & self ) -> u64 {
0 commit comments