55import org .omegaconfig .api .formats .IFormatWriter ;
66import org .omegaconfig .api .formats .IFormatCodec ;
77
8- import java .io .IOException ;
8+ import java .io .* ;
99import java .nio .file .Files ;
1010import java .nio .file .Path ;
11- import java .util .HashMap ;
12- import java .util .LinkedHashSet ;
13- import java .util .Map ;
14- import java .util .Set ;
11+ import java .util .*;
1512
1613public class JSONFormat implements IFormatCodec {
17- public JSONFormat () {
14+ private static final char JSON_OBJECT_START = '{' ;
15+ private static final char JSON_OBJECT_END = '}' ;
16+ private static final char JSON_CONTINUE = ',' ;
17+ private static final char JSON_STRING_LINE = '"' ;
18+ private static final char JSON_ENTRY_SPLIT = ':' ;
19+ private static final char JSON_ESCAPED = '\\' ;
1820
19- }
20-
21- @ Override
22- public String id () {
23- return OmegaConfig .FORMAT_JSON ;
24- }
25-
26- @ Override
27- public String extension () {
28- return "." + id ();
29- }
30-
31- @ Override
32- public String mimeType () {
33- return "application/json" ;
34- }
21+ @ Override public String id () { return OmegaConfig .FORMAT_JSON ; }
22+ @ Override public String extension () { return "." + id (); }
23+ @ Override public String mimeType () { return "application/json" ; }
3524
3625 @ Override
3726 public IFormatReader createReader (Path filePath ) throws IOException {
@@ -43,7 +32,73 @@ public IFormatWriter createWritter(Path filePath) throws IOException {
4332 return null ;
4433 }
4534
46- private static class CharSpect {
35+ private static class NewFormatReader implements IFormatReader {
36+ private final LinkedHashMap <String , String > values = new LinkedHashMap <>();
37+
38+
39+ public NewFormatReader (Path path ) throws IOException {
40+ // READ JSON STRING
41+ var in = new FileInputStream (path .toFile ());
42+ char [] data = new String (in .readAllBytes ()).toCharArray ();
43+ in .close ();
44+
45+ char expected = JSON_OBJECT_START ;
46+ boolean escaped = false ;
47+ boolean keyCapture = false ;
48+ boolean valueCapture = false ;
49+ final LinkedHashSet <String > group = new LinkedHashSet <>();
50+ StringBuilder key = new StringBuilder ();
51+ StringBuilder value =new StringBuilder ();
52+
53+ for (int i = 0 ; i < data .length ; i ++) {
54+ char c = data [i ];
55+
56+ if (c != expected ) {
57+ throw new IllegalArgumentException ("Expected char " + expected + " but received " + c );
58+ }
59+
60+ switch (c ) {
61+ case JSON_OBJECT_START -> {
62+ if (!key .isEmpty ()) {
63+ group .add (key .toString ());
64+ key = new StringBuilder ();
65+ }
66+ expected = JSON_STRING_LINE ;
67+ }
68+
69+ case JSON_STRING_LINE -> {
70+ if (keyCapture ) {
71+ key .append (c );
72+ }
73+ if (valueCapture ) {
74+ value .append (c );
75+ }
76+ }
77+ }
78+ }
79+
80+
81+ }
82+
83+ @ Override
84+ public String read (String fieldName ) {
85+ return "" ;
86+ }
87+
88+ @ Override
89+ public void push (String group ) {
90+
91+ }
92+
93+ @ Override
94+ public void pop () {
95+
96+ }
97+
98+ @ Override
99+ public void close () throws IOException {
100+
101+ }
47102 }
48103
49104 private static class FormatReader implements IFormatReader {
0 commit comments