# tango-rs This library is a client for [Tango control system](https://tango-controls.org) servers. It uses the preexisting C bindings (included) and wraps the API functions provided by it in a Rustic interface. Device proxy API calls: * `command_inout` * `command_query` * `command_list_query` * `get_attribute_list` * `get_attribute_config` * `attribute_list_query` * `read/write_attribute` * `read/write_attributes` * `get/put/delete_device_property` * `get/set_timeout` * `get/set_source` * `lock/unlock/is_locked` Database API calls: * `get_device_exported/_for_class` * `get_object_list` * `get_object_property_list` * `get/put/delete_property` ## Building You need an installed Tango library with headers. Set the `PKG_CONFIG_PATH` environment variable to the directory that contains `tango.pc` if it is not found by default. ## Minimal supported Rust version The crate is tested down to Rust 1.41.1. ## Serde integration When the feature `serde` is activated, the `CommandData`, `AttrValue` and `PropertyValue` types can be serialized and deserialized with serde. This allows quickly converting them from/to JSON, for example. ## Testing For testing/benchmarking, you need a Tango database running on `localhost:10000`, and the default instance of the standard testing server (`TangoTest/test`). Then, you can run `cargo test` to test all wrapped APIs, and `cargo bench` to measure the duration of `command_inout` roundtrips.