Implementando un take_while “cauteloso” usando Peekable

Me gustaria usarPeekable como base para un nuevocautious_take_while operación que actúa comotake_while deIteratorExt pero sin consumir el primer artículo fallido. (Hay una pregunta secundaria sobre si esta es una buena idea, y si hay mejores formas de lograr este objetivo en Rust; estaría feliz de tener pistas en esa dirección, pero sobre todo estoy tratando de entender dónde está mi código rotura).

La API que estoy tratando de habilitar es básicamente:

let mut chars = "abcdefg.".chars().peekable();

let abc : String = chars.by_ref().cautious_take_while(|&x| x != 'd');
let defg : String = chars.by_ref().cautious_take_while(|&x| x != '.');

// yielding (abc = "abc", defg = "defg")

He tomado una grieta encreando un MCVE aquí, pero estoy obteniendo:

: 10: 5: 10:19 error: no se puede mover fuera del contenido prestado: 10 chars.by_ref (). Cautious_take_while (| & x | x! = '.');

Por lo que puedo decir, estoy siguiendo el mismo patrón que el propio RustTakeWhile en términos de las firmas de mi función, pero veo un comportamiento diferente del verificador de préstamos. ¿Alguien puede señalar lo que estoy haciendo mal?

Respuestas a la pregunta(2)

Su respuesta a la pregunta