Skip to main content

mrubyedge_serde_json/
lib.rs

1pub mod json_value;
2
3use std::rc::Rc;
4
5use mrubyedge::{
6    Error,
7    yamrb::{helpers::mrb_define_class_cmethod, value::RObject, vm::VM},
8};
9
10pub fn init_json(vm: &mut VM) {
11    let json_class = vm.define_class("JSON", None, None);
12
13    mrb_define_class_cmethod(
14        vm,
15        json_class.clone(),
16        "dump",
17        Box::new(mrb_json_class_dump),
18    );
19    mrb_define_class_cmethod(
20        vm,
21        json_class.clone(),
22        "generate",
23        Box::new(mrb_json_class_dump),
24    );
25    mrb_define_class_cmethod(
26        vm,
27        json_class.clone(),
28        "load",
29        Box::new(mrb_json_class_load),
30    );
31    mrb_define_class_cmethod(
32        vm,
33        json_class.clone(),
34        "parse",
35        Box::new(mrb_json_class_load),
36    );
37}
38
39pub fn mrb_json_class_dump(vm: &mut VM, args: &[Rc<RObject>]) -> Result<Rc<RObject>, Error> {
40    if args.len() != 1 {
41        return Err(Error::ArgumentError(
42            "wrong number of arguments".to_string(),
43        ));
44    }
45    let result = json_value::mrb_json_dump(vm, args[0].clone())?;
46    Ok(result)
47}
48
49pub fn mrb_json_class_load(vm: &mut VM, args: &[Rc<RObject>]) -> Result<Rc<RObject>, Error> {
50    if args.len() != 1 {
51        return Err(Error::ArgumentError(
52            "wrong number of arguments".to_string(),
53        ));
54    }
55    let json_str: String = args[0].as_ref().try_into()?;
56    let result = json_value::mrb_json_load(vm, json_str)?;
57    Ok(result.get_inner())
58}