파일 읽기는 String이 아니라 Result를 돌려준다

경로 검증, I/O, 검색을 나누면 성공과 실패를 같은 파이프라인에서 다룰 수 있다.

현재 확인용 코드args[2]는 인수 부족 시 panic, expect는 읽기 실패 시 즉시 중단한다.

01

인수 검증

Config::build

개수와 의미를 먼저 확인

02

실행 경계

run → Result

main과 작업 로직 분리

03

전체 읽기

read_to_string

파일을 UTF-8 String으로

04

결과 분기

Result<String>

성공과 실패를 호출자에게

OkOk(contents)

순수 검색 함수가 &str을 받고 결과를 stdout으로 보낸다.

ErrErr(io::Error)

파일 없음·권한·읽기·유효하지 않은 UTF-8 오류를 ?로 main까지 올린다.

테스트 경계Config는 인수 사례, 검색 함수는 문자열 사례, run은 I/O 실패를 각각 검증한다.