za.co.absa.standardization.udf.UDFResult.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of spark-data-standardization_2.12 Show documentation
Show all versions of spark-data-standardization_2.12 Show documentation
Data Standardization library (originally part of the Enceladus project)
The newest version!
/*
* Copyright 2021 ABSA Group Limited
*
* 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 za.co.absa.standardization.udf
import za.co.absa.standardization.ErrorMessage
import za.co.absa.standardization.StandardizationErrorMessage
import za.co.absa.standardization.config.StandardizationConfig
import scala.util.{Failure, Success, Try}
case class UDFResult[T](result: Option[T],
error: Seq[ErrorMessage])
object UDFResult {
def success[T](result: Option[T]): UDFResult[T] = {
UDFResult(result, Seq.empty)
}
def fromTry[T](result: Try[Option[T]],
columnName: String,
rawValue: String,
sourceType: String,
targetType: String,
pattern: Option[String],
stdConfig: StandardizationConfig,
defaultValue: Option[T] = None): UDFResult[T] = {
result match {
case Success(success) => UDFResult.success(success)
case Failure(_) if Option(rawValue).isEmpty => UDFResult(defaultValue, Seq(StandardizationErrorMessage.stdNullErr(columnName)(stdConfig.errorCodes)))
case Failure(_) =>
UDFResult(defaultValue, Seq(StandardizationErrorMessage.stdCastErr(columnName, rawValue, sourceType, targetType, pattern)(stdConfig.errorCodes)))
}
}
}