1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
/* * Copyright (C) 2018 Kubos Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ //! A simple API to make standalone Rust applications with high-level hooks //! for mission life-cycle management //! //! # Examples //! //! ``` //! #[macro_use] //! extern crate failure; //! #[macro_use] //! extern crate kubos_app; //! //! use failure::Error; //! use kubos_app::*; //! use std::time::Duration; //! //! struct MyApp; //! //! impl AppHandler for MyApp { //! fn on_boot(&self, _args: Vec<String>) -> Result<(), Error> { //! println!("OnBoot logic"); //! //! let request = r#"mutation { //! power(state: ON) { //! success //! } //! }"#; //! //! match query(ServiceConfig::new("radio-service"), request, Some(Duration::from_secs(1))) { //! Err(error) => bail!("Failed to communicate with radio service: {}", error), //! Ok(data) => { //! if let Some(success) = data.get("power") //! .and_then(|power| power.get("success")) //! { //! match success.as_bool() { //! Some(true) => println!("Successfully turned on radio"), //! Some(false) => eprintln!("Failed to turn on radio"), //! None => eprintln!("Failed to fetch radio power state") //! } //! } else { //! bail!("Failed to fetch radio power state"); //! } //! } //! } //! //! Ok(()) //! } //! fn on_command(&self, _args: Vec<String>) -> Result<(), Error> { //! println!("OnCommand logic"); //! Ok(()) //! } //! } //! //! fn main() -> Result<(), Error> { //! let app = MyApp { }; //! app_main!(&app)?; //! Ok(()) //! } //! ``` //! #![deny(missing_docs)] #![deny(warnings)] #[macro_use] extern crate failure; extern crate getopts; #[cfg(test)] #[macro_use] extern crate juniper; #[cfg(test)] extern crate kubos_service; extern crate kubos_system; #[cfg(not(test))] extern crate serde_json; #[cfg(test)] #[macro_use] extern crate serde_json; #[cfg(test)] extern crate tempfile; mod framework; mod query; #[cfg(test)] mod tests; pub use framework::*; pub use query::query; pub use kubos_system::Config as ServiceConfig;