simple_states/
simple_states.rs1use linear_type::Linear;
5use std::fs::File;
6use std::io::{Read, Result};
7
8struct Filename(&'static str);
10#[derive(Debug)]
11struct ReadonlyFile(File);
12#[derive(Debug)]
13struct FileContent(String);
14
15fn open_file(Filename(name): Filename) -> Result<ReadonlyFile> {
17 Ok(ReadonlyFile(File::open(name)?))
18}
19
20fn read_text(ReadonlyFile(mut file): ReadonlyFile) -> Result<FileContent> {
21 let mut text = String::new();
22 file.read_to_string(&mut text)?;
23 Ok(FileContent(text))
24}
25
26fn main() {
27 let file_content = Linear::new(Filename("README.md"))
29 .map(open_file)
30 .map_ok(read_text)
31 .unwrap_ok();
32
33 let FileContent(text) = file_content.into_inner();
35 assert!(text.contains("# Example"));
36}