/* * CAmkES backing for Rust Read and Write traits. * * Copyright 2021, Google LLC * Apache License 2.0 * * These CAmkES interfaces express the standard Rust read() and write() * signatures, assuming two separate, externally defined, and implicitly * associated dataports for each of read and write. * * It is intended that Rust code be able to use extern "C" declarations * referencing the camkes.h that this will generate as the core of * implementations of the Read and Write traits. */ procedure rust_read_inf { // Reads up to limit bytes into the read dataport. // // Returns the number of bytes read or a negative value if there is any // error. int read(in size_t limit); }; procedure rust_write_inf { // Writes up to a given number of bytes from the write dataport. // // Returns the number of bytes actually written or a negative value if there // is any error. For non-negative return values < available, the caller is // reponsible for retrying with the remaining bytes at the beginning of the // write dataport. int write(in size_t available); // Blocks until all bytes so far written have been pushed to the real sink. // // The semantics are the same as Rust's Write::flush. Returns 0 on success // and a negative value if there is any error. int flush(); }