Skip to content

Commit

Permalink
Fixes #23607: When a mandatory field in a technique is not defined, w…
Browse files Browse the repository at this point in the history
…e can save a technique and we have a nasty error
  • Loading branch information
amousset committed Oct 25, 2023
1 parent 99d5da8 commit 9c0d9e2
Show file tree
Hide file tree
Showing 3 changed files with 4,682 additions and 5,380 deletions.
1 change: 1 addition & 0 deletions policies/rudder-commons/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@ pub struct Select {
#[serde(rename_all = "snake_case")]
pub struct RegexConstraint {
pub value: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub error_message: Option<String>,
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -219,12 +219,12 @@ final case class JsonGenericMethodParameterRename(old: String, `new`: String)
final case class JsonGenericMethodParameter(
name: String,
description: String,
constraint: Option[JsonParameterConstraint],
constraints: Option[JsonParameterConstraint],
`type`: String
) {
def toMethodParameter(parameterTypeService: ParameterTypeService): PureResult[MethodParameter] = {
parameterTypeService.create(`type`).map { t =>
val c = constraint match {
val c = constraints match {
case None => Nil
case Some(x) => x.toConstraint
}
Expand All @@ -233,14 +233,20 @@ final case class JsonGenericMethodParameter(
}
}

// name is not used for now
final case class JsonParameterConstraintSelect(name: Option[String], value: String)

// error_message is not used for now
final case class JsonParameterConstraintRegex(error_message: Option[String], value: String)

final case class JsonParameterConstraint(
allow_empty_string: Boolean,
allow_whitespace_string: Boolean,
max_length: Int,
min_length: Option[Int],
regex: Option[String],
regex: Option[JsonParameterConstraintRegex],
not_regex: Option[String],
select: Option[List[String]]
select: Option[List[JsonParameterConstraintSelect]]
) {
def toConstraint: List[Constraint] = {
import Constraint._
Expand All @@ -249,14 +255,16 @@ final case class JsonParameterConstraint(
AllowWhiteSpace(allow_whitespace_string) ::
MaxLength(max_length) ::
min_length.map(MinLength.apply).toList :::
regex.map(MatchRegex.apply).toList :::
regex.map(_.value).map(MatchRegex.apply).toList :::
not_regex.map(NotMatchRegex.apply).toList :::
select.map(FromList.apply).toList
select.map(_.map(_.value)).map(FromList.apply).toList
}
}

object GenericMethodSerialization {

implicit val decodeJsonParameterConstraintRegex: JsonDecoder[JsonParameterConstraintRegex] = DeriveJsonDecoder.gen
implicit val decodeJsonParameterConstraintSelect: JsonDecoder[JsonParameterConstraintSelect] = DeriveJsonDecoder.gen
implicit val decodeJsonParameterConstraint: JsonDecoder[JsonParameterConstraint] = DeriveJsonDecoder.gen
implicit val decodeJsonGenericMethodParameterRename: JsonDecoder[JsonGenericMethodParameterRename] = DeriveJsonDecoder.gen
implicit val decodeJsonGenericMethodParameter: JsonDecoder[JsonGenericMethodParameter] = DeriveJsonDecoder.gen
Expand Down

0 comments on commit 9c0d9e2

Please sign in to comment.