diff --git a/clap_derive/src/attrs.rs b/clap_derive/src/attrs.rs index fb35d31f2d1..3c685fbe86c 100644 --- a/clap_derive/src/attrs.rs +++ b/clap_derive/src/attrs.rs @@ -594,7 +594,7 @@ impl Attrs { quote_spanned!(ident.span()=> { static DEFAULT_VALUE: clap::once_cell::sync::Lazy<::std::ffi::OsString> = clap::once_cell::sync::Lazy::new(|| { let val: #ty = #val; - ::std::ffi::OsString = val.into() + ::std::ffi::OsString::from(val) }); &*DEFAULT_VALUE }) diff --git a/tests/derive/default_value.rs b/tests/derive/default_value.rs index fc07e4c1128..6a78f8d6b75 100644 --- a/tests/derive/default_value.rs +++ b/tests/derive/default_value.rs @@ -1,3 +1,5 @@ +use std::path::PathBuf; + use clap::{CommandFactory, Parser}; use crate::utils; @@ -44,6 +46,30 @@ fn auto_default_value_t() { assert!(help.contains("[default: 0]")); } +#[test] +fn default_value_os_t() { + #[derive(Parser, PartialEq, Debug)] + struct Opt { + #[clap(value_parser, default_value_os_t = PathBuf::from("abc.def"))] + arg: PathBuf, + } + assert_eq!( + Opt { + arg: PathBuf::from("abc.def") + }, + Opt::try_parse_from(&["test"]).unwrap() + ); + assert_eq!( + Opt { + arg: PathBuf::from("ghi") + }, + Opt::try_parse_from(&["test", "ghi"]).unwrap() + ); + + let help = utils::get_long_help::(); + assert!(help.contains("[default: abc.def]")); +} + #[test] fn detect_os_variant() { #![allow(unused_parens)] // needed for `as_ref` call