CLI I/O Map
입력은 한곳에서 모으고, 오류는 표준 오류로 분리한다
프로젝트형 CLI는 인수, 파일, 표준 입력을 먼저 판정하고 성공 출력과 진단 출력을 마지막에 분리하면 흐름이 단순해진다.
1
환경 읽기
env::args, 설정값을 모은다
2
입력 선택
인수, 파일,
stdin 우선순위를 정한다
3
본문 확보
read_to_string 결과를 확인한다
4
검색 실행
반복자로 라인 단위 결과를 만든다
5
채널 분리
println!과 eprintln!을 나눈다
결정 지점
성공 경로
실패 경로
검색어와 파일명
CLI 인수에서 읽기
Ok: 설정 구조체
생성
Config::build(args)
Err: 사용법을
stderr로 안내
process::exit(1)
파일 본문
디스크에서 문자열로 읽기
Ok: 검색 함수에
전달
fs::read_to_string(path)
Err: 파일명과 원인을
출력
eprintln!("Problem...")
표준 입력
대화형 입력이 필요한 경우
Ok: 버퍼를 파싱해
사용
stdin().read_line(&mut s)
Err: 재입력 또는
종료 선택
Result<usize>
출력 채널
사용자가 파이프할 수 있게 분리
stdout: 검색 결과만
출력
println!("{line}")
stderr: 진단 메시지
출력
eprintln!("{err}")
Result는 경계에서 처리하고, 라이브러리 함수는 오류를
돌려주며, 실행 파일만 사용자 메시지와 종료 코드를 결정한다.