Skip to content

Instantly share code, notes, and snippets.

@notyy
Created March 17, 2012 05:44
Show Gist options
  • Save notyy/2055464 to your computer and use it in GitHub Desktop.
Save notyy/2055464 to your computer and use it in GitHub Desktop.
so easy to define structure
// original version
def extractToken(resp: Option[String]): Option[Token] = {
logger.info("extracting token from:" + resp)
val AccRegex = """(.*)=(.*)&(.*)=(\d*)""".r
val ErrRegex = """(.*)"error":(.*),"error_description":"(.*)"}(.*)""".r
resp match {
case None => logV(logger.error)("can't extract from empty token resp", None)
case Some(source) => source match {
case AccRegex(_, accToken, _, expire) => logV(logger.info)("token extracted:", Some(Token(accToken, expire.toLong)))
case ErrRegex(_, errCode, errMsg, _) => logV(logger.info)("server respond with error:code=" + errCode + ",msg=" + errMsg, None)
case _ => logV(logger.error)("Strage resonse from server:" + source, None)
}
}
}
//with help of CommonStructure
def extractToken(resp: Option[String]): Option[Token] = withValueChecked(logger)(resp) { s =>
val AccRegex = """(.*)=(.*)&(.*)=(\d*)""".r
val ErrRegex = """(.*)"error":(.*),"error_description":"(.*)"}(.*)""".r
s match {
case AccRegex(_, accToken, _, expire) => Some(Token(accToken, expire.toLong))
case ErrRegex(_, errCode, errMsg, _) => None
case _ => None
}
}
object CommonStructure {
def withValueChecked[A, B](logger: Logger)(param: Option[A])(f: A => Option[B]): Option[B] = {
if (param.isEmpty) logV(logger.error)("can't process empty param", None)
else {
logger.info("processing:" + param)
val rs = f(param.get)
if (rs.isEmpty) logV(logger.error)("result is None when processing " + param, rs)
else logV(logger.info)("processing of " + param + " OK,result is", rs)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment