diff --git a/src/array_string.rs b/src/array_string.rs index a94c3f75..48139b21 100644 --- a/src/array_string.rs +++ b/src/array_string.rs @@ -594,3 +594,17 @@ where Ok(v) } } + +impl<'a, A> TryFrom> for ArrayString +where + A: Array + Copy +{ + type Error = CapacityError; + + fn try_from(f: fmt::Arguments<'a>) -> Result { + use fmt::Write; + let mut v = Self::new(); + v.write_fmt(f).map_err(|e| CapacityError::new(e))?; + Ok(v) + } +} diff --git a/tests/tests.rs b/tests/tests.rs index c7ebcd0c..593b5e41 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -686,3 +686,10 @@ fn test_extend_zst() { assert_eq!(&array[..], &[Z; 5]); assert_eq!(array.len(), 5); } + +#[test] +fn test_try_from_argument() { + use core::convert::TryFrom; + let v = ArrayString::<[u8; 16]>::try_from(format_args!("Hello {}", 123)).unwrap(); + assert_eq!(&v, "Hello 123"); +}