如何在 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' })
因此您需要将参数作为对象传递。
尝试在 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' })
因此您需要将参数作为对象传递。