Skip to content

Fix: format does not transform hash-fields #730

@TobiasNx

Description

@TobiasNx

I intended to create an example for format inspired by:
https://manpages.ubuntu.com/manpages/plucky/man3/Catmandu::Fix::format.3pm.html

See example in playground

Input

{
    "number": "41",
    "numbers": [
        "42",
        "15"
    ],
    "hash": {
        "name": "Albert"
    }
}

Flux

inputFile
| open-file
| as-records
| decode-json
| fix(transformationFile)
| encode-yaml
| print
;

Fix

format("number","%-10.10d")
format("numbers[]","%-10.10d %-5.5d")
format("hash.name","%-10s: %s")

Runs into errors:

Caused by: java.util.IllegalFormatPrecisionException: 10
    at java.util.Formatter$FormatSpecifier.checkInteger (Formatter.java:3138)
        java.util.Formatter$FormatSpecifier.<init> (Formatter.java:2874)
        java.util.Formatter.parse (Formatter.java:2713)
        java.util.Formatter.format (Formatter.java:2655)
        java.util.Formatter.format (Formatter.java:2609)
        java.lang.String.format (String.java:2897)
        org.metafacture.metafix.FixMethod$16.lambda$apply$0 (FixMethod.java:242)
        org.metafacture.metafix.Value.lambda$asList$3 (Value.java:321)
        org.metafacture.metafix.Value.newArray (Value.java:167)
        org.metafacture.metafix.Value.asList (Value.java:317)
        org.metafacture.metafix.Value.asList (Value.java:297)
        org.metafacture.metafix.Value$Hash.getList (Value.java:965)
        org.metafacture.metafix.FixMethod$16.apply (FixMethod.java:241)
        org.metafacture.metafix.RecordTransformer.lambda$processFunction$20 (RecordTransformer.java:217)
        org.metafacture.metafix.RecordTransformer.lambda$processFix$22 (RecordTransformer.java:237)
        org.metafacture.metafix.RecordTransformer.lambda$transform$1 (RecordTransformer.java:136)
        org.metafacture.metafix.RecordTransformer.tryRun (RecordTransformer.java:248)
        org.metafacture.metafix.RecordTransformer.lambda$transform$2 (RecordTransformer.java:136)
        java.lang.Iterable.forEach (Iterable.java:75)
        org.metafacture.metafix.RecordTransformer.transform (RecordTransformer.java:135)
        org.metafacture.metafix.Metafix.endRecord (Metafix.java:325)
        org.metafacture.json.JsonDecoder.decode (JsonDecoder.java:297)
        org.metafacture.json.JsonDecoder.processRecord (JsonDecoder.java:247)
        org.metafacture.json.JsonDecoder.process (JsonDecoder.java:235)
        org.metafacture.json.JsonDecoder.process (JsonDecoder.java:45)
        org.metafacture.io.RecordReader.emitRecord (RecordReader.java:144)
        org.metafacture.io.RecordReader.process (RecordReader.java:132)
        org.metafacture.io.RecordReader.process (RecordReader.java:40)
        org.metafacture.io.FileOpener.process (FileOpener.java:158)
        org.metafacture.io.FileOpener.process (FileOpener.java:41)
        org.metafacture.flux.parser.StringSender.process (StringSender.java:43)
        org.metafacture.flux.parser.Flow.start (Flow.java:118)
        org.metafacture.flux.parser.FluxProgramm.start (FluxProgramm.java:168)
        org.metafacture.runner.Flux.main (Flux.java:87)
        metafacture_playground.process$process.invokeStatic (process.clj:45)
        metafacture_playground.process$process.invoke (process.clj:33)
        metafacture_playground.handler$process_request.invokeStatic (handler.clj:29)
        metafacture_playground.handler$process_request.invoke (handler.clj:27)
        metafacture_playground.handler$fn__3831.invokeStatic (handler.clj:96)
        metafacture_playground.handler/fn (handler.clj:92)
        compojure.core$wrap_response$fn__2406.invoke (core.clj:158)
        compojure.core$wrap_route_middleware$fn__2390.invoke (core.clj:128)
        compojure.core$wrap_route_info$fn__2395.invoke (core.clj:137)
        compojure.core$wrap_route_matches$fn__2399.invoke (core.clj:146)
        compojure.core$routing$fn__2414.invoke (core.clj:185)
        clojure.core$some.invokeStatic (core.clj:2701)
        clojure.core$some.invoke (core.clj:2692)
        compojure.core$routing.invokeStatic (core.clj:185)
        compojure.core$routing.doInvoke (core.clj:182)
        clojure.lang.RestFn.applyTo (RestFn.java:139)
        clojure.core$apply.invokeStatic (core.clj:667)
        clojure.core$apply.invoke (core.clj:660)
        compojure.core$routes$fn__2418.invoke (core.clj:192)
        ring.middleware.params$wrap_params$fn__3532.invoke (params.clj:67)
        metafacture_playground.handler$wrap_body_string$fn__3793.invoke (handler.clj:18)
        clojure.lang.Var.invoke (Var.java:384)
        ring.adapter.jetty$proxy_handler$fn__4050.invoke (jetty.clj:27)
        ring.adapter.jetty.proxy$org.eclipse.jetty.server.handler.AbstractHandler$ff19274a.handle (:-1)
        org.eclipse.jetty.server.handler.HandlerWrapper.handle (HandlerWrapper.java:127)
        org.eclipse.jetty.server.Server.handle (Server.java:501)
        org.eclipse.jetty.server.HttpChannel.lambda$handle$1 (HttpChannel.java:383)
        org.eclipse.jetty.server.HttpChannel.dispatch (HttpChannel.java:556)
        org.eclipse.jetty.server.HttpChannel.handle (HttpChannel.java:375)
        org.eclipse.jetty.server.HttpConnection.onFillable (HttpConnection.java:273)
        org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded (AbstractConnection.java:311)
        org.eclipse.jetty.io.FillInterest.fillable (FillInterest.java:105)
        org.eclipse.jetty.io.ChannelEndPoint$1.run (ChannelEndPoint.java:104)
        org.eclipse.jetty.util.thread.QueuedThreadPool.runJob (QueuedThreadPool.java:806)
        org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run (QueuedThreadPool.java:938)
        java.lang.Thread.run (Thread.java:829)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions