Implementando um take_time “cauteloso” usando o Peekable

Eu gostaria de usarPeekable como base para uma novacautious_take_while operação que age comotake_while deIteratorExt mas sem consumir o primeiro item com falha. (Há uma questão paralela de saber se essa é uma boa ideia e se há maneiras melhores de atingir esse objetivo no Rust - eu ficaria feliz em sugestões nessa direção, mas principalmente estou tentando entender onde está meu código quebra).

A API que estou tentando ativar é basicamente:

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")

Eu tomei uma rachadura emcriando um MCVE aqui, mas estou recebendo:

: 10: 5: 10:19 erro: não é possível sair do conteúdo emprestado: 10 chars.by_ref (). Cautious_take_ while (| & x | x! = '.');

Até onde eu sei, estou seguindo o mesmo padrão que o próprio RustTakeWhile em termos de assinaturas de minha função, mas estou vendo um comportamento diferente do verificador de empréstimo. Alguém pode apontar o que estou fazendo de errado?

questionAnswers(2)

yourAnswerToTheQuestion