Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 12 additions & 10 deletions modules/compiler-core/src/ToSmithyError.scala
Original file line number Diff line number Diff line change
Expand Up @@ -20,36 +20,38 @@ import cats.data.NonEmptyChain
import cats.syntax.all._
import software.amazon.smithy.model.validation.ValidationEvent

sealed trait ToSmithyError extends Throwable
sealed trait ToSmithyError extends Throwable {
// Force all subtypes to provide a message
final override def getMessage(): String = message
def message: String
}

object ToSmithyError {

implicit val order: cats.Order[ToSmithyError] = cats.Order.by(_.getMessage())

final case class Restriction(message: String) extends ToSmithyError {
override def getMessage(): String = message
}
final case class Restriction(message: String) extends ToSmithyError

final case class ProcessingError(message: String) extends ToSmithyError {
override def getMessage(): String = message
}
final case class ProcessingError(message: String) extends ToSmithyError

final case class SmithyValidationFailed(
smithyValidationEvents: List[ValidationEvent]
) extends ToSmithyError {
override def getMessage(): String = {
override def message: String = {
s"Failed to validate the Smithy model:\n${smithyValidationEvents.mkString("\n")}"
}
}

final case class BadRef(ref: String) extends ToSmithyError
final case class BadRef(ref: String) extends ToSmithyError {
override def message: String = s"Unable to parse ref string: $ref"
}

final case class OpenApiParseError(
namespace: NonEmptyChain[String],
errorMessages: List[String]
) extends ToSmithyError
with NoStackTrace {
override def getMessage(): String =
override def message: String =
s"Unable to parse openapi file located at ${namespace.mkString_("/")} with errors: ${errorMessages
.mkString(", ")}"
}
Expand Down
34 changes: 34 additions & 0 deletions modules/compiler-core/test/src/ToSmithyErrorSuite.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package smithytranslate.compiler

import cats.data.NonEmptyChain

final class ToSmithyErrorSuite extends munit.FunSuite {

test("Restriction should have a message") {
val error = ToSmithyError.Restriction("some restriction")
assertNotEquals(Option(error.getMessage), None)
}

test("ProcessingError should have a message") {
val error = ToSmithyError.ProcessingError("some processing error")
assertNotEquals(Option(error.getMessage), None)
}

test("SmithyValidationFailed should have a message") {
val error = ToSmithyError.SmithyValidationFailed(Nil)
assertNotEquals(Option(error.getMessage), None)
}

test("BadRef should have a message") {
val error = ToSmithyError.BadRef("some/ref")
assertNotEquals(Option(error.getMessage), None)
}

test("OpenApiParseError should have a message") {
val error = ToSmithyError.OpenApiParseError(
NonEmptyChain.one("namespace"),
List("error1", "error2")
)
assertNotEquals(Option(error.getMessage), None)
}
}