From 17e22e5cf834c6e723313100cc22c89df23dccce Mon Sep 17 00:00:00 2001 From: Jeremy Wall Date: Tue, 9 Apr 2019 21:02:36 -0500 Subject: [PATCH] FEATURE: Enforce that flags outputs must be a tuple. --- src/convert/flags.rs | 7 +++++++ src/error.rs | 3 +++ 2 files changed, 10 insertions(+) diff --git a/src/convert/flags.rs b/src/convert/flags.rs index 77447cc..7358055 100644 --- a/src/convert/flags.rs +++ b/src/convert/flags.rs @@ -18,6 +18,7 @@ use std::rc::Rc; use crate::build::Val; use crate::convert::traits::{ConvertResult, Converter}; +use crate::error::{BuildError, ErrorType}; /// FlagConverter implements the conversion logic for converting a Val into a set /// of command line flags. @@ -128,6 +129,12 @@ impl FlagConverter { impl Converter for FlagConverter { fn convert(&self, v: Rc, mut w: &mut Write) -> ConvertResult { + if !v.is_tuple() { + return Err(Box::new(BuildError::new( + "Flag outputs must be a tuple", + ErrorType::ConvertError, + ))); + } self.write("", &v, &mut w) } diff --git a/src/error.rs b/src/error.rs index 57d10ec..3240bfa 100644 --- a/src/error.rs +++ b/src/error.rs @@ -37,6 +37,8 @@ pub enum ErrorType { ParseError, AssertError, OSError, + // Conversion errors + ConvertError, // User Defined Declarative Errors UserDefined, } @@ -56,6 +58,7 @@ impl fmt::Display for ErrorType { &ErrorType::ParseError => "ParseError", &ErrorType::AssertError => "AssertError", &ErrorType::OSError => "OSError", + &ErrorType::ConvertError => "ConvertError", &ErrorType::UserDefined => "UserDefined", }; w.write_str(name)