1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use core::marker::PhantomData;

use crate::{BitReader, BitReaderExt, BitUnpackAs, Same};

pub struct DefaultOnNone<As: ?Sized = Same>(PhantomData<As>);

impl<T, As> BitUnpackAs<T> for DefaultOnNone<As>
where
    T: Default,
    As: BitUnpackAs<T>,
{
    fn unpack_as<R>(mut reader: R) -> Result<T, R::Error>
    where
        R: BitReader,
    {
        reader
            .unpack_as::<_, Option<As>>()
            .map(Option::unwrap_or_default)
    }
}