Skip to content

Commit 240f7da

Browse files
authored
Merge pull request #25 from PlexSheep/devel
refactor(reader): load store as readonly
2 parents 5a1e65d + d10a7ca commit 240f7da

File tree

2 files changed

+33
-20
lines changed

2 files changed

+33
-20
lines changed

src/bins/netpulse.rs

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,10 @@ fn main() {
5454
print_version()
5555
}
5656
if matches.opt_present("dump") {
57-
dump(failed_only);
57+
if let Err(e) = dump(failed_only) {
58+
error!("{e}");
59+
std::process::exit(1)
60+
}
5861
} else if matches.opt_present("test") {
5962
if let Err(e) = test_checks() {
6063
error!("{e}");
@@ -66,7 +69,10 @@ fn main() {
6669
std::process::exit(1)
6770
}
6871
} else {
69-
analysis();
72+
if let Err(e) = analysis() {
73+
error!("{e}");
74+
std::process::exit(1)
75+
}
7076
}
7177
}
7278

@@ -80,18 +86,8 @@ fn test_checks() -> Result<(), RunError> {
8086
Ok(())
8187
}
8288

83-
fn store_load() -> Store {
84-
match Store::load() {
85-
Err(e) => {
86-
eprintln!("The store could not be loaded: {e}");
87-
std::process::exit(1)
88-
}
89-
Ok(s) => s,
90-
}
91-
}
92-
93-
fn dump(failed_only: bool) {
94-
let store = store_load();
89+
fn dump(failed_only: bool) -> Result<(), RunError> {
90+
let store = Store::load(true)?;
9591
let mut buf = String::new();
9692
let ref_checks: Vec<&Check> = if failed_only {
9793
store.checks().iter().filter(|c| !c.is_success()).collect()
@@ -102,24 +98,26 @@ fn dump(failed_only: bool) {
10298
eprintln!("{e}");
10399
std::process::exit(1);
104100
}
105-
println!("{buf}")
101+
println!("{buf}");
102+
Ok(())
106103
}
107104

108105
fn rewrite() -> Result<(), RunError> {
109-
let s = Store::load()?;
106+
let s = Store::load(true)?;
110107
s.save()?;
111108
Ok(())
112109
}
113110

114-
fn analysis() {
115-
let store = store_load();
111+
fn analysis() -> Result<(), RunError> {
112+
let store = Store::load(true)?;
116113
match analyze::analyze(&store) {
117114
Err(e) => {
118115
eprintln!("Error while making the analysis: {e}");
119116
std::process::exit(1);
120117
}
121118
Ok(report) => println!("{report}"),
122119
}
120+
Ok(())
123121
}
124122

125123
fn print_version() -> ! {

src/store.rs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ impl Store {
347347
/// store.save().unwrap();
348348
/// ```
349349
pub fn load_or_create() -> Result<Self, StoreError> {
350-
match Self::load() {
350+
match Self::load(false) {
351351
Ok(store) => Ok(store),
352352
Err(err) => match &err {
353353
StoreError::DoesNotExist => Self::create(),
@@ -392,7 +392,7 @@ impl Store {
392392
/// - Store file doesn't exist
393393
/// - Read/parse fails
394394
/// - Version unsupported
395-
pub fn load() -> Result<Self, StoreError> {
395+
pub fn load(readonly: bool) -> Result<Self, StoreError> {
396396
let file = match fs::File::options()
397397
.read(true)
398398
.write(false)
@@ -447,6 +447,11 @@ impl Store {
447447
return Err(StoreError::UnsupportedVersion);
448448
}
449449
}
450+
451+
if readonly {
452+
store.set_readonly();
453+
}
454+
450455
Ok(store)
451456
}
452457

@@ -689,6 +694,16 @@ impl Store {
689694
let version_only: VersionOnly = bincode::deserialize_from(reader)?;
690695
Ok(version_only.version)
691696
}
697+
698+
/// True if this [Store] is read only
699+
pub fn readonly(&self) -> bool {
700+
self.readonly
701+
}
702+
703+
/// Make this [Store] read only
704+
pub fn set_readonly(&mut self) {
705+
self.readonly = true;
706+
}
692707
}
693708

694709
fn has_cap_net_raw() -> bool {

0 commit comments

Comments
 (0)