All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ubirch.kafka.MessageEnvelope.scala Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2019 ubirch GmbH
 *
 * 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.
 */

package com.ubirch.kafka

import com.ubirch.kafka.MessageEnvelope.ContextKeyNotFoundException
import com.ubirch.protocol.ProtocolMessage
import org.json4s.{Formats, JObject}
import org.json4s.JsonAST.{JField, JNothing}
import org.json4s.Extraction._

case class MessageEnvelope(ubirchPacket: ProtocolMessage, context: JObject = JObject()) {
  def withExtraContext[T](key: String, value: T)(implicit formats: Formats): MessageEnvelope = {
    withExtraContext(key -> value)
  }

  def withExtraContext(fields: (String, Any)*)(implicit formats: Formats): MessageEnvelope = {
    this.copy(context = context merge JObject(fields.map { case (k, v) => JField(k, decompose(v)) }: _*))
  }

  def stripContext(): MessageEnvelope = {
    this.copy(context = JObject())
  }

  def getContext[T](key: String)(implicit formats: Formats, m: Manifest[T]): T = (context \ key match {
    case JNothing => throw new ContextKeyNotFoundException(key)
    case x => x
  }).extract[T]
}

object MessageEnvelope {
  class ContextKeyNotFoundException(key: String) extends Exception(s"key [$key] not found")
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy