Sorry for the rather complicated title, I do not know how to phrase it in a way that is less ... messy?
So, I had the following (simple) problem:
let reg = Some(".*"); let builder : Option<RegexBuilder> = reg .map(RegexBuilder::new) // Apply some RegexBuilder::function(&mut self, param) -> &mut Self functions
The last part got me thinking. Well, I could simply use
.map(|s| RegexBuilder::new(s).some().function()) and go from there, but that's not so nice syntax-wise. How would it be if writing the following would be possible:
let reg = Some(".*"); let builder : Option<RegexBuilder> = reg .map(RegexBuilder::new) .apply(RegexBuilder::multi_line, false) .apply(RegexBuilder::ignore_whitespace, true) // and so on
That would be awesome and really readable.So I started playing around:
But unfortunaltey I cannot figure out the lifetimes. Also, that POC is not yet made generic over all things. I guess it might be possible to implement these for
Result<T, E> and
Iterator<Item = T>. Multiple arguments are no possible this way, I guess... maybe different functions for this case (
apply2 and so on).
What do you think and if yes, can you help me figure the lifetimes and generics out? Maybe that's worth a new crate, right?