Skip to content

Unexpected type cast between u32 and u16 #6

@tiberiumboy

Description

@tiberiumboy

When serializing a variable that is type u32, it will be typed as string instead of number. u16 and below correctly cast into number.

Using the following crate dependencies:

serde = { version = "^1.0", features = ["derive"] }
serde_json = "1.0.133"
xml-rpc = "0.0.12"

Test to replicate:

Rust:

extern crate xml_rpc;
use serde::{Deserialize, Serialize};
use std::net::{IpAddr, Ipv4Addr, SocketAddr};
use xml_rpc::{Fault, Server};

#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Point {
    should_be_number: u32,
    is_a_number: u16,
}

fn get_value(_i: i8) -> Result<Point, Fault> {
    let point = Point {
        should_be_number: 5,
        is_a_number: 5,
    };
    Ok(point)
}

fn main() {
    let socket = SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), 8080);
    let mut server = Server::new();
    server.register_simple("get_value", &get_value);
    let bound_server = server.bind(&socket).unwrap();
    bound_server.run();
}

Python:

import xmlrpc.client
proxy = xmlrpc.client.ServerProxy("http://localhost:8080")
point = proxy.get_value(1)
print(point)

Expected:
{'is_a_number': 5, 'should_be_number': 5}

Result:
{'is_a_number': 5, 'should_be_number': '5'}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions