Switch yaml.Parser to parse binary scalars as Bytes (#1277)

This commit is contained in:
Jen Basch
2025-10-30 16:45:59 -07:00
committed by GitHub
parent ede48d0fff
commit ffc9167bf5
8 changed files with 59 additions and 13 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -322,12 +322,13 @@ public final class ParserNodes {
}
}
// Pkl doesn't have a binary type, so parse as base64 string with whitespace removed
private static class ConstructBinary implements ConstructNode {
@Override
public String construct(Node node) {
public VmBytes construct(Node node) {
var value = ((ScalarNode) node).getValue();
return WHITESPACE.matcher(value).replaceAll("");
var encoded = WHITESPACE.matcher(value).replaceAll("");
var decoded = Base64.getDecoder().decode(encoded);
return decoded.length == 0 ? VmBytes.EMPTY : new VmBytes(decoded);
}
}

View File

@@ -109,9 +109,16 @@ examples {
parser.parse("!!timestamp 2001-12-15T02:59:43.1Z")
}
// parsed as string because Pkl doesn't have a binary type
["binary"] {
parser.parse("!!binary dGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZw==")
parser.parse("!!binary AQID")
parser.parse("!!binary 'AQID'")
parser.parse("!!binary \"AQID\"")
parser.parse("""
!!binary |-
AQID
AQID
AQID
""")
}
["string"] {
@@ -195,6 +202,7 @@ examples {
price : 2392.00
tax : 251.42
total: 4443.52
logo: !!binary AQID
comments: >
Late afternoon is best.
Backup contact is Nancy

View File

@@ -97,7 +97,10 @@ examples {
"2001-12-15T02:59:43.1Z"
}
["binary"] {
"dGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZw=="
Bytes(1, 2, 3)
Bytes(1, 2, 3)
Bytes(1, 2, 3)
Bytes(1, 2, 3, 1, 2, 3, 1, 2, 3)
}
["string"] {
null
@@ -190,6 +193,7 @@ examples {
}
tax = 251.42
total = 4443.52
logo = Bytes(1, 2, 3)
comments = "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338."
}
}

View File

@@ -97,7 +97,10 @@ examples {
"2001-12-15T02:59:43.1Z"
}
["binary"] {
"dGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZw=="
Bytes(1, 2, 3)
Bytes(1, 2, 3)
Bytes(1, 2, 3)
Bytes(1, 2, 3, 1, 2, 3, 1, 2, 3)
}
["string"] {
null
@@ -190,6 +193,7 @@ examples {
}
tax = 251.42
total = 4443.52
logo = Bytes(1, 2, 3)
comments = "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338."
}
}

View File

@@ -97,7 +97,10 @@ examples {
"2001-12-15T02:59:43.1Z"
}
["binary"] {
"dGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZw=="
Bytes(1, 2, 3)
Bytes(1, 2, 3)
Bytes(1, 2, 3)
Bytes(1, 2, 3, 1, 2, 3, 1, 2, 3)
}
["string"] {
null
@@ -190,6 +193,7 @@ examples {
}
tax = 251.42
total = 4443.52
logo = Bytes(1, 2, 3)
comments = "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338."
}
}