From 8178172565d3ae0334100bc69409d77a8d3edb66 Mon Sep 17 00:00:00 2001 From: Tyler Southwick Date: Thu, 4 Feb 2016 23:11:10 -0800 Subject: [PATCH] add ConditionFunctionNestable fixes #60 --- .../model/AmazonFunctionCall.scala | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/main/scala/com/monsanto/arch/cloudformation/model/AmazonFunctionCall.scala b/src/main/scala/com/monsanto/arch/cloudformation/model/AmazonFunctionCall.scala index 2ef362d5..f3b8de01 100644 --- a/src/main/scala/com/monsanto/arch/cloudformation/model/AmazonFunctionCall.scala +++ b/src/main/scala/com/monsanto/arch/cloudformation/model/AmazonFunctionCall.scala @@ -108,6 +108,14 @@ object ResourceRef extends DefaultJsonProtocol { } } +sealed trait ConditionFunctionNestable[LogicalReturnType] { + def token : Token[LogicalReturnType] +} + +sealed abstract class NestableAmazonFunctionCall[LogicalReturnType](funName : String) extends AmazonFunctionCall[LogicalReturnType](funName) with ConditionFunctionNestable[LogicalReturnType] { + lazy val token = FunctionCallToken(this) +} + case class `Fn::GetAtt`(args: Seq[String]) extends AmazonFunctionCall[String]("Fn::GetAtt"){type CFBackingType = Seq[String] ; val arguments = args} @@ -124,19 +132,20 @@ case class `Fn::Base64`(toEncode: Token[String]) extends AmazonFunctionCall[String]("Fn::Base64"){type CFBackingType = Token[String] ; val arguments = toEncode} case class `Fn::Equals`(a: Token[String], b: Token[String]) - extends AmazonFunctionCall[String]("Fn::Equals"){type CFBackingType = (Token[String], Token[String]) ; val arguments = (a, b)} + extends NestableAmazonFunctionCall[String]("Fn::Equals") +{type CFBackingType = (Token[String], Token[String]) ; val arguments = (a, b)} -case class `Fn::Not`(fn: Token[String]) - extends AmazonFunctionCall[String]("Fn::Not"){type CFBackingType = (Seq[Token[String]]) ; val arguments = Seq(fn)} +case class `Fn::Not`(fn: ConditionFunctionNestable[String]) + extends AmazonFunctionCall[String]("Fn::Not"){type CFBackingType = (Seq[Token[String]]) ; val arguments = Seq(fn).map(_.token)} -case class `Fn::And`(fn: Seq[Token[String]]) - extends AmazonFunctionCall[String]("Fn::And"){type CFBackingType = (Seq[Token[String]]) ; val arguments = fn} +case class `Fn::And`(fn: Seq[ConditionFunctionNestable[String]]) + extends NestableAmazonFunctionCall[String]("Fn::And"){type CFBackingType = (Seq[Token[String]]) ; val arguments = fn.map(_.token)} -case class `Fn::Or`(fn: Seq[Token[String]]) - extends AmazonFunctionCall[String]("Fn::Or"){type CFBackingType = (Seq[Token[String]]) ; val arguments = fn} +case class `Fn::Or`(fn: Seq[ConditionFunctionNestable[String]]) + extends NestableAmazonFunctionCall[String]("Fn::Or"){type CFBackingType = (Seq[Token[String]]) ; val arguments = fn.map(_.token)} case class ConditionFnRef(c: Condition) - extends AmazonFunctionCall[String]("Condition"){type CFBackingType = (Token[String]) ; val arguments = StringToken(c.name)} + extends NestableAmazonFunctionCall[String]("Condition"){type CFBackingType = (Token[String]) ; val arguments = StringToken(c.name)} case class `Fn::Select`[R: JsonFormat](index: Token[StringBackedInt], listOfObjects: Token[Seq[R]]) extends AmazonFunctionCall[R]("Fn::Select") {