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

com.github.chengpohi.parser.ParserUtils.scala Maven / Gradle / Ivy

The newest version!
package com.github.chengpohi.parser

import com.github.chengpohi.api.dsl.Definition
import com.github.chengpohi.collection.JsonCollection.Val
import com.typesafe.config.ConfigFactory
import org.json4s.DefaultFormats
import org.json4s.native.Serialization.write

import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration.Duration
import scala.concurrent.{Await, Future}

/**
  * elasticdsl
  * Created by chengpohi on 3/24/16.
  */
class ParserUtils {
  implicit val formats = DefaultFormats
  val instrumentations = ConfigFactory.load("instrumentations.json")

  case class ParserErrorDefinition(parameters: Seq[Val]) extends Definition[String] {
    override def execute: Future[String] = {
      Future {
        val (errorMsg, input) = (parameters.head.extract[String], parameters(1).extract[String])
        write(Map(("illegal_input", input), ("caused_by", errorMsg)))
      }
    }

    override def json: String = Await.result(execute, Duration.Inf)
  }

  def error: Seq[Val] => ParserErrorDefinition = parameters => {
    ParserErrorDefinition(parameters)
  }

  def help: Seq[Val] => Future[String] = {
    {
      case Seq(input) =>
        Future {
          val s = input.extract[String]
          val example: String = instrumentations.getConfig(s.trim).getString("example")
          val description: String = instrumentations.getConfig(s.trim).getString("description")
          write(Map(("example", example), ("description", description)))
        }
      case _ =>
        Future {
          "I have no idea for this."
        }
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy