[Rust] Cargo 확장 커맨드 만들기

cargo는 cargo 'asdf'의 형태를 가지는 명령어의 확장을 지원한다.
덕분에 cargo-edit 등의 유용한 보조도구들이 탄생했고, 계속해서 만들어지고 있는 중이다.

만드는 법은 의외로 간단하다.
일단 atty와 structopt라는 크레이트를 추가하고

[dependencies]
atty = { version = "0.2.14", optional = true }
structopt = { version = "0.3.18", optional = true }

각 기능마다 동작할 main 함수를 만들어준다.

이건 foo라는 명령으로 실행될 로직이다.
그냥 텍스트만 하나 만들어주는거다.

이것도 마찬가지다.

다 짰으면 Cargo.toml에다가 각 기능에 대한 진입점을 정의한다.
[[bin]] 섹션에 두면 된다.

[[bin]]
name = "cargo-foo"
path = "src/foo.rs"
required-features = ["foo"]

[[bin]]
name = "cargo-bar"
path = "src/bar.rs"
required-features = ["bar"]

이름은 그냥 고유한 이름인 것 같고, path가 그 진입점 main 함수.
required-features는 기능 이름이다.

잘 정의했으면 이제 아래 features 섹션에다가 바로 연결해주면 된다.
이런 식으로

[features]
default = ["foo", "bar"]
foo = ["cli"]
bar = ["cli"]
cli = ["atty", "structopt"]

그럼 다 끝난거다.

이름도 잘 지어놓고, 배포설정 알아서 잘 한 다음에

배포하면 된다.

잘 올라갔다면 그냥 아래와 같은 식으로 설치가 가능할 것이다.

그럼 기대한대로 잘 동작할 것이다.

그렇다.


https://github.com/myyrakle/cargo-foobar