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
// // 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. // // Contributed by: William Greer ([email protected]) and Sam Justice ([email protected]) // //! TOML parser for the `comms-service`. This module parses a `toml` file and returns a //! struct containing configuration information for a `comms-service`. use crate::errors::*; use serde_derive::Deserialize; /// Default maximum number of message handlers pub const DEFAULT_MAX_HANDLERS: u16 = 50; /// Default message handler timeout pub const DEFAULT_TIMEOUT: u64 = 1500; /// A struct that holds useful configuration options to use in a `comms-service` implementation. /// Created by parsing a configuration file in the `toml` file format. #[derive(Clone, Debug, Deserialize)] pub struct CommsConfig { /// The maximum number of concurrent message handlers allowed /// Default: 50 pub max_num_handlers: Option<u16>, /// Optional list of ports used by downlink endpoints that send messages to the ground. /// Each port in the list will be used by one downlink endpoint. pub downlink_ports: Option<Vec<u16>>, /// Timeout for the completion of GraphQL operations within message handlers (in milliseconds). /// Default: 1500 pub timeout: Option<u64>, /// Required. IP address on which comms service will listen. pub ip: String, } impl CommsConfig { /// Builds a new configuration for a specific `comms-service`. /// Configuration parameters are read from the service's `config.toml` file. pub fn new(service_config: kubos_system::Config) -> CommsResult<Self> { let raw_config = service_config.get("comms").ok_or_else(|| { CommsServiceError::ConfigError("Unable to get `comms` config".to_owned()) })?; let config: CommsConfig = raw_config.try_into().map_err(|err| { let msg = format!("Failed to parse config: {}", err); CommsServiceError::ConfigError(msg) })?; Ok(config) } }