- 
                Notifications
    You must be signed in to change notification settings 
- Fork 128
Add TryFromBytes::try_read_from_io #2619
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
| Getting the return type of this right is an interesting rabbit hole! My initial thinking was  We can't return a  If we change the signature to something like: two questions arise: 
 I think the answer to both of these questions is yes.  We can achieve the first by defining a  pub struct ReadBuffer<'a, Dst>(Pin<&'a mut MaybeUninit<Dst>>);
impl<'a, Dst> ReadBuffer<'a, Dst> {
    pub fn from_maybe_uninit(src: Pin<&'a mut MaybeUninit<Dst>>) -> Self {
        use zerocopy::FromZeros;
        ReadBuffer(unsafe {
             src.map_unchecked_mut(|src| { src.zero(); src })
        })
    }
}...and we can achieve the second by using our  EDIT: Actually, I think this is unsound under reverse transmutation. | 
| I'm still working on exploring the problem space, presently by considering what a  fn try_mut_from_io<R>(mut source: R, buffer: &mut CoreMaybeUninit<Self>) -> io::Result<Result<&mut Self, ValidityError<&[u8], Self>>>
    where
        Self: KnownLayout + Sized,
        R: io::Read,Note the lack of an  | 
d6013bb    to
    f54136d      
    Compare
  
    | Codecov ReportAttention: Patch coverage is  
 
 Additional details and impacted files@@            Coverage Diff             @@
##             main    #2619      +/-   ##
==========================================
- Coverage   88.72%   88.40%   -0.33%     
==========================================
  Files          20       20              
  Lines        5332     5356      +24     
==========================================
+ Hits         4731     4735       +4     
- Misses        601      621      +20     ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
 | 
        
          
                src/lib.rs
              
                Outdated
          
        
      | // TODO: Write tests for this method | ||
| #[cfg(feature = "std")] | ||
| #[inline(always)] | ||
| fn try_read_from_io<R>(mut src: R) -> io::Result<Result<Self, ValidityError<[u8; 0], Self>>> | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why not just ValidityError<(), Self>? [u8; 0] seems a bit unnecessary. I feel like () conveys "we're not providing a source value."
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We'll want it to be something that's Deref so if it's embedded in a ConvertError, the whole package implements Error. So how about &'static ().
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Eh, between &'static () and [u8; 0], I'd prefer [u8; 0].
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would need to be &'static [u8; 0]
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Which I think is worse, tbh.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh I see. Yeah, agreed that &'static () is better.
f54136d    to
    af48300      
    Compare
  
    Makes progress on #158 gherrit-pr-id: Ia15467145b06dd57e4dfd9e127fdd6d7a313ecba
af48300    to
    97ce7a8      
    Compare
  
    
Makes progress on #158
gherrit-pr-id: Ia15467145b06dd57e4dfd9e127fdd6d7a313ecba