기본 모듈 완료
이제 프로그램이 사용자 상호 작용(cli
모듈 사용) 및 파일 처리(tasks
모듈 사용)를 처리할 수 있으며, 모든 것이 예상대로 작동하는지 확인하기 위해 시험해 볼 수 있습니다.
기본 저널 파일을 사용하고 사용자에게 친숙한 오류를 제공하는 등의 몇 가지 작업을 수행해야 하지만, 이러한 작업은 나중에 처리해 보겠습니다.
기본 모듈 완료 및 프로그램 실행
다음으로 수행해야 할 일은 Actions
구조체를 tasks
모듈에서 정의된 세 가지 공용 함수에 연결하는 것입니다. main.rs
파일을 열고 다음과 같이 만듭니다.
use structopt::StructOpt;
mod cli;
mod tasks;
use cli::{Action::*, CommandLineArgs};
use tasks::Task;
fn main() {
// Get the command-line arguments.
let CommandLineArgs {
action,
journal_file,
} = CommandLineArgs::from_args();
// Unpack the journal file.
let journal_file = journal_file.expect("Failed to find journal file");
// Perform the action.
match action {
Add { text } => tasks::add_task(journal_file, Task::new(text)),
List => tasks::list_tasks(journal_file),
Done { position } => tasks::complete_task(journal_file, position),
}
.expect("Failed to perform action")
}
main.rs
개요는 정말 간단합니다.
먼저 CommandLineArgs
구조체를 해당 필드로 해체하면 해당 값을 작업 처리 함수에 독립적으로 전달할 수 있습니다.
journal_file
은 Option<PathBuf>
유형이므로 저널 파일에 대한 경로를 추출하거나 panic
을 내보내야 합니다. 나중에 이 단계를 다시 수행하여 프로그램이 기본 파일을 찾도록 하겠습니다. 지금은 이 .expect
명령이 제대로 작동합니다.
마지막으로, 가능한 각 Action
을 해당 함수에 일치시켜 열거형에서 함수로 필수 필드를 전달합니다. 모든 함수가 실패할 수 있는 Result
유형을 반환하기 때문에 match
블록 끝에서 .expect
를 호출합니다. 다시 말씀드리지만, 오류 발생 시 사용자에게 유용한 오류 메시지를 제공하도록 이 기능을 나중에 다시 한번 다듬겠습니다.
사용해 보겠습니다. 터미널을 열고 다음 명령을 입력합니다.
$ cargo run -- -j test-journal.json add "buy milk"
$ cargo run -- -j test-journal.json add "take the dog for a walk"
$ cargo run -- -j test-journal.json add "water the plants"
$ cargo run -- -j test-journal.json list
1: buy milk [2021-01-08 16:39]
2: take the dog for a walk [2021-01-08 16:39]
3: water the plants [2021-01-08 16:39]
$ cargo run -- -j test-journal.json done 2
$ cargo run -- -j test-journal.json list
1: buy milk [2021-01-08 16:39]
2: water the plants [2021-01-08 16:39]
프로그램이 정상적으로 실행되고 있는 것 같습니다.
--
이후에 전달된 모든 인수가 cargo
자체가 아닌 프로그램으로 전송되도록 cargo run --
호출로 시작했습니다.
그런 다음, 하위 명령 add
다음에 작업 이름 문자열을 사용하여 세 가지 작업을 연속으로 추가했습니다. 그러면 list
하위 명령은 맨 오른쪽에 타임스탬프와 함께 세 가지 작업을 순서대로 표시했습니다. 그런 다음, 우리는 done 2
하위 명령을 호출하여 두 번째 작업을 완료로 표시했습니다. list
를다시 호출했을 때 해당 작업이 사라졌습니다. 놀랍지 않습니까?
test-journal.json
파일을 들여다 보면 다음 콘텐츠를 볼 수 있습니다.
[{"text":"buy milk","created_at":1610134741},{"text":"water the plants","created_at":1610134762}]
각 Task
는 JSON 개체로 표시되고 각 파일이 하나의 키임을 알 수 있습니다. 작업 설명은 문자열로 저장되고 타임스탬프는 epoch 이후 경과된 시간(초)으로 유지됩니다.
JSON 파일을 보기 쉽게 인쇄하면 다음과 같습니다.
[
{
"text": "buy milk",
"created_at": 1610134741
},
{
"text": "water the plants",
"created_at": 1610134762
}
]
다음 두 섹션에서는 기본 저널 파일을 사용하도록 구성하고 더 보기 쉬운 오류 메시지를 표시하여 프로그램의 유용성을 개선할 것입니다.