如何在 borsh-js 中序列化枚举

How to serialize enum in borsh-js

尝试在 Rust 中序列化一个对象并在 JS 中反序列化它 我们得到 000100000031 哈希,序列化后:

pub enum Service {
    Whosebug,
    Twitter,
    Telegram,
}
pub struct ServiceId {
    pub service: Service,
    pub id: ExternalId,
}

当试图在 JS 中反序列化时使用这个:

const Service = {
    Whosebug: 0,
    Twitter: 1,
    Telegram: 2
}

class ServiceId {
    constructor(service, id) {
        this.service = service
        this.id = id
    }
}
const value = new ServiceId(Service.Whosebug, userId)

const schema = new Map([
            [ServiceId,
                { kind: 'struct', fields: [['service', 'u8'], ['id', 'string']] }]
        ]);

反序列化后,我们得到了这个,但它是不正确的,因为我们在一个对象中有一个对象和一个冗余的id参数:

ServiceId { service: { service: undefined, id: '1' }, id: undefined }

首先可能是因为在 Rust 中我们有枚举类型,所以我们如何在 borsh-js 中使用枚举。 其次,如果不是,为什么我们的结果不正确?

很难从文档中理解,但你需要像这样创建你的class,一切都会好起来的。

class ServiceId {
    constructor({ service, id }) {
        this.service = service
        this.id = id
    }
}
new ServiceId({ service: 'lol', id: 'kek' })

因此您需要将参数作为对象传递。