CRATE SPLIT

최종 구조는 main을 얇게 만들고 테스트 가능한 로직을 lib로 옮긴다

바이너리는 실행 경계를 담당하고, 라이브러리는 설정과 실제 작업을 공개 API로 제공한다.

src/main.rs

입력 경계

env::args로 인수를 모으고 실패 메시지를 사용자에게 보여준다.

종료 결정

process::exit로 실패 상태 코드를 반환한다.

src/lib.rs

Config::build

검색어와 파일 경로를 검증해 설정 객체로 묶고 Err를 반환한다.

run

파일 읽기와 검색 로직을 수행하고 실패를 Result로 전파한다.

pub API

main과 테스트 코드가 같은 함수와 타입을 호출할 수 있게 한다.

args Config run Result exit
읽는 기준

main은 직접 테스트하기 어려우므로 작게 남긴다. 대부분의 동작은 lib.rs의 공개 함수로 옮겨 단위 테스트가 접근할 수 있게 만든다.