pub fn full_with_context_no_errors<SI: ?Sized, CO, C, P, HD>(
    input: &SI,
    home_dir: HD,
    context: C
) -> Cow<'_, str> where
    SI: AsRef<str>,
    CO: AsRef<str>,
    C: FnMut(&str) -> Option<CO>,
    P: AsRef<Path>,
    HD: FnOnce() -> Option<P>, 
Expand description

Same as full_with_context(), but forbids the variable lookup function to return errors.

This function also performs full shell-like expansion, but it uses env_with_context_no_errors() for environment expansion whose context lookup function returns just Option<CO> instead of Result<Option<CO>, E>. Therefore, the function itself also returns just Cow<str> instead of Result<Cow<str>, LookupError<E>>. Otherwise it is identical to full_with_context().


use std::path::{PathBuf, Path};
use std::borrow::Cow;

fn home_dir() -> Option<PathBuf> { Some(Path::new("/home/user").into()) }

fn get_env(name: &str) -> Option<&'static str> {
    match name {
        "A" => Some("a value"),
        "B" => Some("b value"),
        "T" => Some("~"),
        _ => None

// Performs both tilde and environment expansions
    shellexpand::full_with_context_no_errors("~/$A/$B", home_dir, get_env),
    "/home/user/a value/b value"

// Input without starting tilde and without variables does not cause allocations
let s = shellexpand::full_with_context_no_errors("some/path", home_dir, get_env);
match s {
    Cow::Borrowed(s) => assert_eq!(s, "some/path"),
    _ => unreachable!("the above variant is always valid")

// Input with a tilde inside a variable in the beginning of the string does not cause tilde
// expansion
    shellexpand::full_with_context_no_errors("$T/$A/$B", home_dir, get_env),
    "~/a value/b value"