Skip to content

Commit

Permalink
Work in progress
Browse files Browse the repository at this point in the history
  • Loading branch information
clarktsiory committed May 7, 2024
1 parent d7bf321 commit b0b217d
Show file tree
Hide file tree
Showing 3 changed files with 689 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ import com.normation.rudder.services.queries.JsonQueryLexer
import com.normation.rudder.services.queries.StringCriterionLine
import com.normation.rudder.services.queries.StringQuery
import com.typesafe.config.ConfigValue
import io.scalaland.chimney.Transformer
import io.scalaland.chimney.dsl.*
import net.liftweb.common.*
import net.liftweb.http.Req
Expand Down Expand Up @@ -334,7 +335,37 @@ object JsonQueryObjects {
}
}

// policy servers are serialized in their output format
final case class JQNodeDetailLevel(
fields: Set[String]
) extends AnyVal

object JQNodeDetailLevel {
implicit val transformer: Transformer[JQNodeDetailLevel, NodeDetailLevel] = (jq: JQNodeDetailLevel) => {
import jq.fields
if (fields.contains("full")) {
FullDetailLevel
} else {
val base = {
if (fields.contains("minimal")) {
MinimalDetailLevel
} else {
DefaultDetailLevel
}
}
val customFields = fields.filter { field =>
field != "minimal" &&
field != "default" &&
NodeDetailLevel.allFields.contains(field)
}
if (customFields.isEmpty) {
base
} else {
val customLevel = CustomDetailLevel(base, customFields.toSet)
customLevel
}
}
}
}
}

trait RudderJsonDecoders {
Expand Down Expand Up @@ -466,6 +497,12 @@ class ZioJsonExtractor(queryParser: CmdbQueryParser with JsonQueryLexer) {
*/
implicit class Extract(params: Map[String, List[String]]) {
def optGet(key: String): Option[String] = params.get(key).flatMap(_.headOption)
def parseOne[A](key: String, decoder: String => A): PureResult[Option[A]] = {
optGet(key) match {
case None => Right(None)
case Some(x) => Right(Some(decoder(x)))
}
}
def parse[A](key: String, decoder: JsonDecoder[A]): PureResult[Option[A]] = {
optGet(key) match {
case None => Right(None)
Expand Down Expand Up @@ -622,4 +659,8 @@ class ZioJsonExtractor(queryParser: CmdbQueryParser with JsonQueryLexer) {
}
}

def extractNodeDetailLevelFromParams(params: Map[String, List[String]]): PureResult[Option[JQNodeDetailLevel]] = {
params.parseOne("include", _.split(",").toSet.transformInto[JQNodeDetailLevel])
}

}

0 comments on commit b0b217d

Please sign in to comment.