Skip to content

Missing support for core::net::Ipv4Addr/etc. #376

Description

@yanshay

Deku has support for no_std.
It also supports std::net::Ipv4Addr (and other IP addresses structures).
However, in no_std the std IP addresses structures are replaced with core::net:: IP addresses.
I think it's worth supporting those structure as well for completeness ease of developing structures for both std/no_std targets.

Is there a way to implement this myself in my library?
When I just try to copy the code from Deku and apply it on core::net::Ipv4Addr, rust doesn't allow it because DekuWrite is a foreign trait. Any way to overcome it without replacing the structure with my own Ipv4Addr structure (and then using standard serialization) which then cause complications elsewhere?

This is what I tried:

impl<Ctx> DekuWrite<Ctx> for core::net::Ipv4Addr
where
    u32: DekuWrite<Ctx>,
{
    fn write(&self, output: &mut BitVec<u8, Msb0>, ctx: Ctx) -> Result<(), DekuError> {
        let ip: u32 = (*self).into();
        ip.write(output, ctx)
    }
}

This is the error rust raised:

error[E0210]: type parameter `Ctx` must be used as the type parameter for some local type (e.g., `MyStruct<Ctx>`)
  --> src/lib.rs:24:6
   |
24 | impl<Ctx> DekuWrite<Ctx> for core::net::Ipv4Addr
   |      ^^^ type parameter `Ctx` must be used as the type parameter for some local type
   |
   = note: implementing a foreign trait is only possible if at least one of the types for which it is implemented is local
   = note: only traits defined in the current crate can be implemented for a type parameter

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions