Skip to content

Commit

Permalink
Merge pull request #44 from shoo/enh_json
Browse files Browse the repository at this point in the history
Support @safe and @name
  • Loading branch information
shoo authored Apr 30, 2024
2 parents 161d3ef + ae8fc1b commit 2a5113b
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 63 deletions.
20 changes: 10 additions & 10 deletions .github/workflows/master.yml
Original file line number Diff line number Diff line change
Expand Up @@ -292,8 +292,8 @@ jobs:

# No. OS ARCH COMPILER UT TT BLD DOC COV
# 21. macOS x86_64 dmd o o x x o
test-osx-x86_64-dmd-latest:
name: test-osx-x86_64-dmd-latest
test-macos12-x86_64-dmd-latest:
name: test-macos12-x86_64-dmd-latest
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
Expand All @@ -308,15 +308,15 @@ jobs:
- name: Upload coverage result
uses: actions/upload-artifact@v2
with:
name: coverage-osx
name: coverage-macos12
path: .cov


# No. OS ARCH COMPILER UT TT BLD DOC COV
# 22. macOS x86_64 ldc o x o o x
test-osx-x86_64-ldc-latest:
name: test-osx-x86_64-ldc-latest
runs-on: macos-latest
test-macos12-x86_64-ldc-latest:
name: test-macos12-x86_64-ldc-latest
runs-on: macos-12
steps:
- uses: actions/checkout@v2
- name: Install D compiler
Expand All @@ -341,7 +341,7 @@ jobs:
# Upload coverage to Codecov
upload-codecov:
name: upload-codecov
needs: [test-windows-x86-dmd-latest, test-windows-x86-ldc-latest, test-windows-x86_64-dmd-latest, test-windows-x86_64-ldc-latest, test-windows-x86_64-ldc-master, test-linux-x86-ldc-latest, test-linux-x86_64-dmd-latest, test-linux-x86_64-ldc-latest, test-linux-x86_64-dmd-master, test-osx-x86_64-dmd-latest, test-osx-x86_64-ldc-latest]
needs: [test-windows-x86-dmd-latest, test-windows-x86-ldc-latest, test-windows-x86_64-dmd-latest, test-windows-x86_64-ldc-latest, test-windows-x86_64-ldc-master, test-linux-x86-ldc-latest, test-linux-x86_64-dmd-latest, test-linux-x86_64-ldc-latest, test-linux-x86_64-dmd-master, test-macos12-x86_64-dmd-latest, test-macos12-x86_64-ldc-latest]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
Expand All @@ -362,10 +362,10 @@ jobs:
- name: Download coverage result
uses: actions/download-artifact@v2
with:
name: coverage-osx
path: coverage-osx
name: coverage-macos12
path: coverage-macos12
- name: Upload coverage to Codecov
run: bash <(curl -s https://codecov.io/bash) -t ${{ secrets.CODECOV_TOKEN }} -s coverage-osx
run: bash <(curl -s https://codecov.io/bash) -t ${{ secrets.CODECOV_TOKEN }} -s coverage-macos12

# Deploy Pages
deproy-pages:
Expand Down
22 changes: 11 additions & 11 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -289,9 +289,9 @@ jobs:

# No. OS ARCH COMPILER UT TT BLD DOC COV
# 21. macOS x86_64 dmd o o x x o
test-osx-x86_64-dmd-latest:
name: test-osx-x86_64-dmd-latest
runs-on: macos-latest
test-macos12-x86_64-dmd-latest:
name: test-macos12-x86_64-dmd-latest
runs-on: macos-12
steps:
- uses: actions/checkout@v2
- name: Install D compiler
Expand All @@ -305,15 +305,15 @@ jobs:
- name: Upload coverage result
uses: actions/upload-artifact@v2
with:
name: coverage-osx
name: coverage-macos12
path: .cov


# No. OS ARCH COMPILER UT TT BLD DOC COV
# 22. macOS x86_64 ldc o x o o x
test-osx-x86_64-ldc-latest:
name: test-osx-x86_64-ldc-latest
runs-on: macos-latest
test-macos12-x86_64-ldc-latest:
name: test-macos12-x86_64-ldc-latest
runs-on: macos-12
steps:
- uses: actions/checkout@v2
- name: Install D compiler
Expand All @@ -338,7 +338,7 @@ jobs:
# Upload coverage to Codecov
upload-codecov:
name: upload-codecov
needs: [test-windows-x86-dmd-latest, test-windows-x86-ldc-latest, test-windows-x86_64-dmd-latest, test-windows-x86_64-ldc-latest, test-windows-x86_64-ldc-master, test-linux-x86-ldc-latest, test-linux-x86_64-dmd-latest, test-linux-x86_64-ldc-latest, test-linux-x86_64-dmd-master, test-osx-x86_64-dmd-latest, test-osx-x86_64-ldc-latest]
needs: [test-windows-x86-dmd-latest, test-windows-x86-ldc-latest, test-windows-x86_64-dmd-latest, test-windows-x86_64-ldc-latest, test-windows-x86_64-ldc-master, test-linux-x86-ldc-latest, test-linux-x86_64-dmd-latest, test-linux-x86_64-ldc-latest, test-linux-x86_64-dmd-master, test-macos12-x86_64-dmd-latest, test-macos12-x86_64-ldc-latest]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
Expand All @@ -359,7 +359,7 @@ jobs:
- name: Download coverage result
uses: actions/download-artifact@v2
with:
name: coverage-osx
path: coverage-osx
name: coverage-macos12
path: coverage-macos12
- name: Upload coverage to Codecov
run: bash <(curl -s https://codecov.io/bash) -t ${{ secrets.CODECOV_TOKEN }} -s coverage-osx
run: bash <(curl -s https://codecov.io/bash) -t ${{ secrets.CODECOV_TOKEN }} -s coverage-macos12
20 changes: 10 additions & 10 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -86,9 +86,9 @@ jobs:

# No. OS ARCH COMPILER UT TT BLD DOC
# 22. macOS x86_64 ldc o o O o
create-osx-x86_64:
name: create-osx-x86_64
runs-on: macos-latest
create-macos12-x86_64:
name: create-macos12-x86_64
runs-on: macos-12
steps:
- uses: actions/checkout@v2
- name: Install D compiler
Expand All @@ -103,13 +103,13 @@ jobs:
#- name: Upload created archive
# uses: actions/upload-artifact@v2
# with:
# name: osx-x86_64-binary
# name: macos12-x86_64-binary
# path: ${{ steps.create_archive.outputs.ARCNAME }}

# Deploy Pages
create-release:
name: create-release
needs: [create-windows-x86, create-windows-x86_64, create-linux-x86_64, create-osx-x86_64]
needs: [create-windows-x86, create-windows-x86_64, create-linux-x86_64, create-macos12-x86_64]
runs-on: ubuntu-latest
steps:
#- name: Get Names
Expand All @@ -132,10 +132,10 @@ jobs:
# with:
# name: linux-x86_64-binary
# path: ./
#- name: Download osx-x86_64-binary
#- name: Download macos12-x86_64-binary
# uses: actions/download-artifact@v2
# with:
# name: osx-x86_64-binary
# name: macos12-x86_64-binary
# path: ./
- name: Create Release
id: create_release
Expand Down Expand Up @@ -178,12 +178,12 @@ jobs:
# asset_name: ${{ steps.get_names.outputs.PROJNAME }}-${{ steps.get_names.outputs.TAGNAME }}-linux-x86_64.tar.gz
# asset_content_type: application/x-gzip
#- name: Upload Release Asset OSX
# id: upload-release-asset-osx
# id: upload-release-asset-macos12
# uses: actions/upload-release-asset@v1
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# with:
# upload_url: ${{ steps.create_release.outputs.upload_url }}
# asset_path: ${{ steps.get_names.outputs.PROJNAME }}-${{ steps.get_names.outputs.TAGNAME }}-osx-x86_64.tar.gz
# asset_name: ${{ steps.get_names.outputs.PROJNAME }}-${{ steps.get_names.outputs.TAGNAME }}-osx-x86_64.tar.gz
# asset_path: ${{ steps.get_names.outputs.PROJNAME }}-${{ steps.get_names.outputs.TAGNAME }}-macos12-x86_64.tar.gz
# asset_name: ${{ steps.get_names.outputs.PROJNAME }}-${{ steps.get_names.outputs.TAGNAME }}-macos12-x86_64.tar.gz
# asset_content_type: application/x-gzip
16 changes: 8 additions & 8 deletions .github/workflows/status.yml
Original file line number Diff line number Diff line change
Expand Up @@ -312,9 +312,9 @@ jobs:

# No. OS ARCH COMPILER UT TT BLD DOC COV
# 21. macOS x86_64 dmd o o x x o
test-osx-x86_64-dmd-latest:
name: test-osx-x86_64-dmd-latest
runs-on: macos-latest
test-macos12-x86_64-dmd-latest:
name: test-macos12-x86_64-dmd-latest
runs-on: macos-12
steps:
- uses: actions/checkout@v2
with:
Expand All @@ -330,15 +330,15 @@ jobs:
- name: Upload coverage result
uses: actions/upload-artifact@v2
with:
name: coverage-osx
name: coverage-macos12
path: .cov


# No. OS ARCH COMPILER UT TT BLD DOC COV
# 22. macOS x86_64 ldc o x o o x
test-osx-x86_64-ldc-latest:
name: test-osx-x86_64-ldc-latest
runs-on: macos-latest
test-macos12-x86_64-ldc-latest:
name: test-macos12-x86_64-ldc-latest
runs-on: macos-12
steps:
- uses: actions/checkout@v2
with:
Expand All @@ -365,7 +365,7 @@ jobs:
# Deploy Pages
deproy-pages:
name: deploy-pages
needs: [test-windows-x86-dmd-latest, test-windows-x86-ldc-latest, test-windows-x86_64-dmd-latest, test-windows-x86_64-ldc-latest, test-windows-x86_64-ldc-master, test-linux-x86-ldc-latest, test-linux-x86_64-dmd-latest, test-linux-x86_64-ldc-latest, test-linux-x86_64-dmd-master, test-osx-x86_64-dmd-latest, test-osx-x86_64-ldc-latest]
needs: [test-windows-x86-dmd-latest, test-windows-x86-ldc-latest, test-windows-x86_64-dmd-latest, test-windows-x86_64-ldc-latest, test-windows-x86_64-ldc-master, test-linux-x86-ldc-latest, test-linux-x86_64-dmd-latest, test-linux-x86_64-ldc-latest, test-linux-x86_64-dmd-master, test-macos12-x86_64-dmd-latest, test-macos12-x86_64-ldc-latest]
runs-on: ubuntu-latest
steps:
- name: Download generated pages
Expand Down
52 changes: 28 additions & 24 deletions voile/json.d
Original file line number Diff line number Diff line change
Expand Up @@ -1053,7 +1053,12 @@ private alias _getKinds(T, string uk, alias tag) = aliasSeqOf!(()
static foreach (member; getKeyMemberNames!T)
{
static foreach (val; getValues!(__traits(getMember, T, member)))
ret ~= Kind(member, JSONValue(val));
{
static if (hasName!(__traits(getMember, T, member)))
ret ~= Kind(getName!(__traits(getMember, T, member)), JSONValue(val));
else
ret ~= Kind(member, JSONValue(val));
}
}
}
else
Expand Down Expand Up @@ -1444,7 +1449,6 @@ void serializeToJsonFile(T)(in T data, string jsonfile, JSONOptions options = JS
std.file.write(jsonfile, contents);
}


//
private void _deserializeFromJsonImpl(Types...)(ref SumType!Types dat, in JSONValue json)
{
Expand All @@ -1453,39 +1457,39 @@ private void _deserializeFromJsonImpl(Types...)(ref SumType!Types dat, in JSONVa
final switch (json.type)
{
case JSONType.null_:
dat = MU.init;
() @trusted { dat = MU.init; }();
break;
case JSONType.string:
static if (canMatch!(MU, string))
dat = json.str;
() @trusted { dat = json.str; }();
break;
case JSONType.integer:
static if (canMatch!(MU, long))
dat = json.integer;
() @trusted { dat = json.integer; }();
else static if (canMatch!(MU, int))
dat = json.integer;
() @trusted { dat = json.integer; }();
else static if (canMatch!(MU, short))
dat = json.integer;
() @trusted { dat = json.integer; }();
else static if (canMatch!(MU, byte))
dat = json.integer;
() @trusted { dat = json.integer; }();
break;
case JSONType.uinteger:
static if (canMatch!(MU, ulong))
dat = json.uinteger;
() @trusted { dat = json.uinteger; }();
else static if (canMatch!(MU, uint))
dat = json.uinteger;
() @trusted { dat = json.uinteger; }();
else static if (canMatch!(MU, ushort))
dat = json.uinteger;
() @trusted { dat = json.uinteger; }();
else static if (canMatch!(MU, ubyte))
dat = json.uinteger;
() @trusted { dat = json.uinteger; }();
break;
case JSONType.float_:
static if (canMatch!(MU, real))
dat = json.floating;
() @trusted { dat = json.floating; }();
else static if (canMatch!(MU, double))
dat = json.floating;
() @trusted { dat = json.floating; }();
else static if (canMatch!(MU, float))
dat = json.floating;
() @trusted { dat = json.floating; }();
break;
case JSONType.array:
// 配列型の候補を選択
Expand All @@ -1498,14 +1502,14 @@ private void _deserializeFromJsonImpl(Types...)(ref SumType!Types dat, in JSONVa
else static if (AryTypes.length == 1)
{
// 配列型が1つならそれを最優先で選択
dat = deserializeFromJson!(AryTypes[0])(tmp, json);
() @trusted { dat = deserializeFromJson!(AryTypes[0])(tmp, json); }();
return;
}
else
{
// 配列型が複数ある場合は1つ目のデータの要素で決定
if (json.array.length == 0)
dat = MU.init;
() @trusted { dat = MU.init; }();
import std.meta;
alias ElementTypes = staticMap!(ForeachType, AryTypes);
SumType!ElementTypes datElm;
Expand All @@ -1514,7 +1518,7 @@ private void _deserializeFromJsonImpl(Types...)(ref SumType!Types dat, in JSONVa
datElm.match!(
(_){
alias AryType = MU.Types[staticIndexOf!(typeof(_), ElementTypes)];
dat = json.deserializeFromJson!AryType();
() @trusted { dat = json.deserializeFromJson!AryType(); }();
}
);
return;
Expand All @@ -1531,7 +1535,7 @@ private void _deserializeFromJsonImpl(Types...)(ref SumType!Types dat, in JSONVa
else static if (ObjTypes.length == 1)
{
// オブジェクト型が1つならそれを最優先で選択
dst = deserializeFromJson!(ObjTypes[0])(json);
() @trusted { dst = deserializeFromJson!(ObjTypes[0])(json); }();
}
else
{
Expand All @@ -1545,7 +1549,7 @@ private void _deserializeFromJsonImpl(Types...)(ref SumType!Types dat, in JSONVa
matchKeys &= cast(bool)(memberName in json);
if (matchKeys)
{
dat = deserializeFromJson!ObjType(json);
() @trusted { dat = deserializeFromJson!ObjType(json); }();
return;
}
}}
Expand All @@ -1562,7 +1566,7 @@ private void _deserializeFromJsonImpl(Types...)(ref SumType!Types dat, in JSONVa
{
if (*v == kind.value)
{
dat = deserializeFromJson!(ObjTypes[idx])(json);
() @trusted { dat = deserializeFromJson!(ObjTypes[idx])(json); }();
return;
}
}
Expand All @@ -1574,7 +1578,7 @@ private void _deserializeFromJsonImpl(Types...)(ref SumType!Types dat, in JSONVa
case JSONType.true_:
case JSONType.false_:
static if (hasType!(TypeEnum!Types, bool))
dat.initialize!bool(src.boolean);
() @trusted { dat = src.boolean; }();
break;
}
}
Expand Down Expand Up @@ -1878,7 +1882,7 @@ void deserializeFromJson(T)(ref T data, in JSONValue json)
{
if (json.type != JSONType.array)
return;
auto jvAry = json.array;
auto jvAry = (() @trusted => json.array)();
static if (isDynamicArray!T)
data.length = jvAry.length;
foreach (idx, ref dataElm; data)
Expand All @@ -1891,7 +1895,7 @@ void deserializeFromJson(T)(ref T data, in JSONValue json)
data.clear();
alias KeyType = typeof(data.byKey.front);
alias ValueType = typeof(data.byValue.front);
foreach (pair; json.object.byPair)
foreach (pair; (() @trusted => json.object)().byPair)
{
import std.algorithm: move;
data.update(pair.key.to!KeyType(),
Expand Down

0 comments on commit 2a5113b

Please sign in to comment.