Function git_credentials::program::main
source · pub fn main<CredentialsFn, E>(
args: impl IntoIterator<Item = OsString>,
stdin: impl Read,
stdout: impl Write,
credentials: CredentialsFn
) -> Result<(), Error>where
CredentialsFn: FnOnce(Action, Context) -> Result<Option<Context>, E>,
E: Error + Send + Sync + 'static,
Expand description
Invoke a custom credentials helper which receives program args
, with the first argument being the
action to perform (as opposed to the program name).
Then read context information from stdin
and if the action is Action::Get
, then write the result to stdout
.
credentials
is the API version of such call, whereOk(Some(context))
returns credentials, and Ok(None)
indicates
no credentials could be found for url
, which is always set when called.
Call this function from a programs main
, passing std::env::args_os()
, stdin()
and stdout
accordingly, along with
your own helper implementation.
Examples found in repository?
examples/custom-helper.rs (lines 5-23)
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
pub fn main() -> Result<(), git_credentials::program::main::Error> {
git_credentials::program::main(
std::env::args_os().skip(1),
std::io::stdin(),
std::io::stdout(),
|action, context| -> std::io::Result<_> {
match action {
program::main::Action::Get => Ok(Some(protocol::Context {
username: Some("user".into()),
password: Some("pass".into()),
..context
})),
program::main::Action::Erase => Err(std::io::Error::new(
std::io::ErrorKind::Other,
"Refusing to delete credentials for demo purposes",
)),
program::main::Action::Store => Ok(None),
}
},
)
}
More examples
examples/git-credential-lite.rs (lines 5-22)
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
pub fn main() -> Result<(), git_credentials::program::main::Error> {
git_credentials::program::main(
std::env::args_os().skip(1),
std::io::stdin(),
std::io::stdout(),
|action, context| {
use git_credentials::program::main::Action::*;
git_credentials::helper::Cascade::default()
.invoke(
match action {
Get => git_credentials::helper::Action::Get(context),
Erase => git_credentials::helper::Action::Erase(context.to_bstring()),
Store => git_credentials::helper::Action::Store(context.to_bstring()),
},
git_prompt::Options::default().apply_environment(true, true, true),
)
.map(|outcome| outcome.and_then(|outcome| (&outcome.next).try_into().ok()))
},
)
}