Circe: Klären Sie die Rolle der "Nachricht" von DecodingFailure.

Erstellt am 19. Juni 2016  ·  4Kommentare  ·  Quelle: circe/circe

circes DecodingFailure ist ein Nachkomme von Argonauts (String, CursorHistory) in DecodeResult , und in Argonaut gibt es einige Unklarheiten darüber, was die Zeichenfolge darstellt - an einigen Stellen handelt es sich nur um eine Zeichenfolgendarstellung des Typs. und an anderen Stellen ist es eine detailliertere Nachricht darüber, was schief gelaufen ist. Da es in Argonaut keinen Namen hat (und das entsprechende Argument für zB DecodeResult.fail nur s ), scheint die Bibliothek keine besondere Verpflichtung dahingehend einzugehen, wie die Zeichenfolge aussehen soll interpretiert werden.

Ich hatte ursprünglich geplant, hier in Kürze weitere Anleitungen zu geben, aber wir sind bei Version 0.5 und message in DecodingFailure spielt immer noch beide Rollen, und jetzt spielen die neuen DecodingFailure.fromThrowable in # 303 fügt eine gedruckte Stapelverfolgung in das Nachrichtenfeld ein, die noch eine andere Art von Dingen einführt, die es tun kann.

Ich würde mich für Vorschläge interessieren, wie wir die Felder in DecodingFailure verfeinern können, um zu verdeutlichen, was jeder tun sollte. Ein einfacher Ansatz wäre, einfach neue Felder hinzuzufügen: so etwas wie name: String , message: String , ein optionales underlying: Option[Throwable] und das faule CursorHistory , aber ich bin es definitiv offen für andere Ideen.

help wanted question

Hilfreichster Kommentar

Ich bevorzuge tatsächliche Fehlerklassen, die häufige Fehlerfälle darstellen. Dies gibt den Entwicklern die Freiheit, einen Dekodierungsfehler in die von ihnen benötigte W / E-Ausgabe umzuwandeln.

Ich denke, diese sollten die häufigsten Fehler abdecken:

  • Fehlendes Feld
  • Falscher Typ (falscher JSON-Typ)
  • Ungültige Daten (z. B. Verletzung von Einschränkungen in mehreren Feldern wie Start kann nicht nach Ende für eine java.time.Period erfolgen)

Alle 4 Kommentare

Ohne den jeweiligen Code übermäßig gut zu kennen, scheinen Ihre Vorschläge ein guter erster Ansatz zu sein. Haben Sie es versucht und gesehen, wie der Code schwenkt?

Nur meine 0,000002 €:

Persönlich würde ich sehr beschreibende Fehlermeldungen befürworten.

Ich denke, im Vergleich zu message , das nur der Name des Typs ist, klingt das Triplett name , message , underlying sehr gut. Insbesondere die Stapelverfolgung in DecodingFailure.fromThrowable wäre als separates Feld sinnvoller. Im Moment sind die Fehlermeldungen von Decoder#emapTry ziemlich unangenehm chaotisch :)

Ich bevorzuge tatsächliche Fehlerklassen, die häufige Fehlerfälle darstellen. Dies gibt den Entwicklern die Freiheit, einen Dekodierungsfehler in die von ihnen benötigte W / E-Ausgabe umzuwandeln.

Ich denke, diese sollten die häufigsten Fehler abdecken:

  • Fehlendes Feld
  • Falscher Typ (falscher JSON-Typ)
  • Ungültige Daten (z. B. Verletzung von Einschränkungen in mehreren Feldern wie Start kann nicht nach Ende für eine java.time.Period erfolgen)

Während darüber nachgedacht wird, wäre es schön, einfach die in # 222 hinzugefügte Show-Instanz zu verwenden, um die Nachricht zu erzeugen. Auf diese Weise erhalten wir den schönen Pfad im Javascript-Stil für den Verlauf, der für größere Dokumente viel besser geeignet ist.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen