Code Monkey home page Code Monkey logo

Comments (2)

dtolnay avatar dtolnay commented on May 27, 2024 1

Your code has a lot of mistakes unrelated to Ok so it's tough to tell what you are doing, but I am very confident that using erased_serde's Ok type is not the right way.

Possibly something like this.

struct Foo {
    ty: unsafe fn(*const u8) -> *const dyn erased_serde::Serialize,
}

impl Foo {
    fn new<T>() -> Self
    where
        T: serde::Serialize + 'static,
    {
        unsafe fn ty<T>(ptr: *const u8) -> *const dyn erased_serde::Serialize
        where
            T: serde::Serialize + 'static,
        {
            ptr.cast::<T>()
        }
        Foo { ty: ty::<T> }
    }

    unsafe fn serialize<S>(&self, serializer: S, ptr: *const u8) -> Result<S::Ok, S::Error>
    where
        S: serde::Serializer,
    {
        let value = unsafe { &*(self.ty)(ptr) };
        erased_serde::serialize(value, serializer)
    }
}

fn main() {
    let foo = Foo::new::<i32>();
    let ser = serde_json::value::Serializer;
    let ptr = &99i32 as *const i32 as *const u8;
    let result = unsafe { foo.serialize(ser, ptr) };
    println!("{}", result.unwrap());
}

from erased-serde.

Shatur avatar Shatur commented on May 27, 2024

@dtolnay is it possible to erase generic serializer without exporting Ok?
Because returing Serialize only works if you serialize the whole value or one of its field. If I need to serialize 2+ fields and now the whole struct, I can't return Serialize, I need to accept Serializer in my function.

from erased-serde.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.