Skip to content

Commit 785f88c

Browse files
authored
fix: relax sized req on cow (#21)
1 parent 9b31595 commit 785f88c

File tree

3 files changed

+18
-7
lines changed

3 files changed

+18
-7
lines changed

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ name = "init4-bin-base"
44
description = "Internal utilities for binaries produced by the init4 team"
55
keywords = ["init4", "bin", "base"]
66

7-
version = "0.3.1"
7+
version = "0.3.2"
88
edition = "2021"
99
rust-version = "1.81"
1010
authors = ["init4", "James Prestwich"]

src/utils/from_env.rs

+12-4
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ where
371371
impl<T, U> FromEnv for std::borrow::Cow<'static, U>
372372
where
373373
T: FromEnv,
374-
U: std::borrow::ToOwned<Owned = T> + core::fmt::Debug,
374+
U: std::borrow::ToOwned<Owned = T> + core::fmt::Debug + ?Sized,
375375
{
376376
type Error = T::Error;
377377

@@ -538,7 +538,7 @@ where
538538
impl<T, U> FromEnvVar for std::borrow::Cow<'static, U>
539539
where
540540
T: FromEnvVar,
541-
U: std::borrow::ToOwned<Owned = T> + core::fmt::Debug,
541+
U: std::borrow::ToOwned<Owned = T> + core::fmt::Debug + ?Sized,
542542
{
543543
type Error = T::Error;
544544

@@ -639,13 +639,13 @@ impl FromEnvVar for bool {
639639

640640
#[cfg(test)]
641641
mod test {
642-
use std::time::Duration;
642+
use std::{borrow::Cow, time::Duration};
643643

644644
use super::*;
645645

646646
fn set<T>(env: &str, val: &T)
647647
where
648-
T: ToString,
648+
T: ToString + ?Sized,
649649
{
650650
std::env::set_var(env, val.to_string());
651651
}
@@ -720,4 +720,12 @@ mod test {
720720

721721
test_expect_err::<u8, _>("U8_", "", FromEnvErr::empty("U8_"));
722722
}
723+
724+
#[test]
725+
fn is_cow_str_from_env_var() {
726+
let s = "hello";
727+
set("COW", s);
728+
let res: Cow<'static, str> = Cow::from_env_var("COW").unwrap();
729+
assert_eq!(res, Cow::<'static, str>::Owned(s.to_owned()));
730+
}
723731
}

tests/macro.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ pub struct MyCfg {
1313
#[from_env(var = "PERFECT", desc = "A bold and neat string", infallible)]
1414
pub strings_cannot_fail: String,
1515

16+
#[from_env(var = "COW", desc = "Cow<str>", infallible)]
17+
pub cow: std::borrow::Cow<'static, str>,
18+
1619
#[from_env(
1720
var = "MAYBE_NOT_NEEDED",
1821
desc = "This is an optional string",
@@ -31,12 +34,12 @@ pub struct MyTupleCfg(
3134
#[test]
3235
fn basic_inventory() {
3336
let inv = MyCfg::inventory();
34-
assert_eq!(inv.len(), 4);
37+
assert_eq!(inv.len(), 5);
3538
}
3639

3740
#[test]
3841
fn nested_inventory() {
3942
let inv = MyTupleCfg::inventory();
40-
assert_eq!(inv.len(), 5);
43+
assert_eq!(inv.len(), 6);
4144
dbg!(inv);
4245
}

0 commit comments

Comments
 (0)