Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(sdk): add json try methods #3014

Merged
merged 7 commits into from
Jun 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
232 changes: 214 additions & 18 deletions docs/docs/04-standard-library/90-api-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -3990,15 +3990,60 @@ Return the total number of years in this Duration.

Immutable Json.

#### Initializers <a name="Initializers" id="@winglang/sdk.std.Json.Initializer"></a>

```wing
bring std;

new std.Json()
```

| **Name** | **Type** | **Description** |
| --- | --- | --- |

---

#### Methods <a name="Methods" id="Methods"></a>

| **Name** | **Description** |
| --- | --- |
| <code><a href="#@winglang/sdk.std.Json.asBool">asBool</a></code> | Convert Json element to number if possible. |
| <code><a href="#@winglang/sdk.std.Json.asNum">asNum</a></code> | Convert Json element to number if possible. |
| <code><a href="#@winglang/sdk.std.Json.asStr">asStr</a></code> | Convert Json element to string if possible. |
| <code><a href="#@winglang/sdk.std.Json.get">get</a></code> | Returns a specified element from the Json. |
| <code><a href="#@winglang/sdk.std.Json.getAt">getAt</a></code> | Returns a specified element at a given index from Json Array. |
| <code><a href="#@winglang/sdk.std.Json.tryAsBool">tryAsBool</a></code> | Convert Json element to boolean if possible. |
| <code><a href="#@winglang/sdk.std.Json.tryAsNum">tryAsNum</a></code> | Convert Json element to string if possible. |
| <code><a href="#@winglang/sdk.std.Json.tryAsStr">tryAsStr</a></code> | Convert Json element to string if possible. |
| <code><a href="#@winglang/sdk.std.Json.tryGet">tryGet</a></code> | Optionally returns an specified element from the Json. |
| <code><a href="#@winglang/sdk.std.Json.tryGetAt">tryGetAt</a></code> | Optionally returns a specified element at a given index from Json Array. |

---

##### `asBool` <a name="asBool" id="@winglang/sdk.std.Json.asBool"></a>

```wing
asBool(): bool
```

Convert Json element to number if possible.

##### `asNum` <a name="asNum" id="@winglang/sdk.std.Json.asNum"></a>

```wing
asNum(): num
```

Convert Json element to number if possible.

##### `asStr` <a name="asStr" id="@winglang/sdk.std.Json.asStr"></a>

```wing
asStr(): str
```

Convert Json element to string if possible.

##### `get` <a name="get" id="@winglang/sdk.std.Json.get"></a>

```wing
Expand Down Expand Up @@ -4031,10 +4076,67 @@ The index of the element in the Json Array to return.

---

##### `tryAsBool` <a name="tryAsBool" id="@winglang/sdk.std.Json.tryAsBool"></a>

```wing
tryAsBool(): bool
```

Convert Json element to boolean if possible.

##### `tryAsNum` <a name="tryAsNum" id="@winglang/sdk.std.Json.tryAsNum"></a>

```wing
tryAsNum(): num
```

Convert Json element to string if possible.

##### `tryAsStr` <a name="tryAsStr" id="@winglang/sdk.std.Json.tryAsStr"></a>

```wing
tryAsStr(): str
```

Convert Json element to string if possible.

##### `tryGet` <a name="tryGet" id="@winglang/sdk.std.Json.tryGet"></a>

```wing
tryGet(key: str): Json
```

Optionally returns an specified element from the Json.

###### `key`<sup>Required</sup> <a name="key" id="@winglang/sdk.std.Json.tryGet.parameter.key"></a>

- *Type:* str

The key of the element to return.

---

##### `tryGetAt` <a name="tryGetAt" id="@winglang/sdk.std.Json.tryGetAt"></a>

```wing
tryGetAt(index: num): Json
```

Optionally returns a specified element at a given index from Json Array.

###### `index`<sup>Required</sup> <a name="index" id="@winglang/sdk.std.Json.tryGetAt.parameter.index"></a>

- *Type:* num

The index of the element in the Json Array to return.

---

#### Static Functions <a name="Static Functions" id="Static Functions"></a>

| **Name** | **Description** |
| --- | --- |
| <code><a href="#@winglang/sdk.std.Json.deepCopy">deepCopy</a></code> | Creates an immutable deep copy of the Json. |
| <code><a href="#@winglang/sdk.std.Json.deepCopyMut">deepCopyMut</a></code> | Creates a mutable deep copy of the Json. |
| <code><a href="#@winglang/sdk.std.Json.delete">delete</a></code> | Deletes a key in a given Json. |
| <code><a href="#@winglang/sdk.std.Json.has">has</a></code> | Checks if a Json object has a given key. |
Expand All @@ -4046,6 +4148,24 @@ The index of the element in the Json Array to return.

---

##### `deepCopy` <a name="deepCopy" id="@winglang/sdk.std.Json.deepCopy"></a>

```wing
bring std;

std.Json.deepCopy(json: MutJson)
```

Creates an immutable deep copy of the Json.

###### `json`<sup>Required</sup> <a name="json" id="@winglang/sdk.std.Json.deepCopy.parameter.json"></a>

- *Type:* <a href="#@winglang/sdk.std.MutJson">MutJson</a>

to copy.

---

##### `deepCopyMut` <a name="deepCopyMut" id="@winglang/sdk.std.Json.deepCopyMut"></a>

```wing
Expand All @@ -4069,14 +4189,14 @@ to copy.
```wing
bring std;

std.Json.delete(json: Json, key: str)
std.Json.delete(json: MutJson, key: str)
```

Deletes a key in a given Json.

###### `json`<sup>Required</sup> <a name="json" id="@winglang/sdk.std.Json.delete.parameter.json"></a>

- *Type:* <a href="#@winglang/sdk.std.Json">Json</a>
- *Type:* <a href="#@winglang/sdk.std.MutJson">MutJson</a>

to delete key from.

Expand Down Expand Up @@ -4121,14 +4241,14 @@ The key to check.
```wing
bring std;

std.Json.keys(json: Json)
std.Json.keys(json: any)
```

Returns the keys from the Json object.

###### `json`<sup>Required</sup> <a name="json" id="@winglang/sdk.std.Json.keys.parameter.json"></a>

- *Type:* <a href="#@winglang/sdk.std.Json">Json</a>
- *Type:* any

to get keys from.

Expand Down Expand Up @@ -4157,7 +4277,7 @@ to parse as Json.
```wing
bring std;

std.Json.stringify(json: Json, indent?: num)
std.Json.stringify(json: any, indent?: num)
```

Formats Json as string.
Expand All @@ -4166,7 +4286,7 @@ Formats Json as string.

###### `json`<sup>Required</sup> <a name="json" id="@winglang/sdk.std.Json.stringify.parameter.json"></a>

- *Type:* <a href="#@winglang/sdk.std.Json">Json</a>
- *Type:* any

to format as string.

Expand Down Expand Up @@ -4480,17 +4600,62 @@ The length of the array.

Mutable Json.

#### Initializers <a name="Initializers" id="@winglang/sdk.std.MutJson.Initializer"></a>

```wing
bring std;

new std.MutJson()
```

| **Name** | **Type** | **Description** |
| --- | --- | --- |

---

#### Methods <a name="Methods" id="Methods"></a>

| **Name** | **Description** |
| --- | --- |
| <code><a href="#@winglang/sdk.std.MutJson.asBool">asBool</a></code> | Convert Json element to number if possible. |
| <code><a href="#@winglang/sdk.std.MutJson.asNum">asNum</a></code> | Convert Json element to number if possible. |
| <code><a href="#@winglang/sdk.std.MutJson.asStr">asStr</a></code> | Convert Json element to string if possible. |
| <code><a href="#@winglang/sdk.std.MutJson.get">get</a></code> | Returns a specified element from the Json. |
| <code><a href="#@winglang/sdk.std.MutJson.getAt">getAt</a></code> | Returns a specified element at a given index from MutJson Array. |
| <code><a href="#@winglang/sdk.std.MutJson.set">set</a></code> | Adds or updates an element in MutJson with a specific key and value. |
| <code><a href="#@winglang/sdk.std.MutJson.setAt">setAt</a></code> | Set element in MutJson Array with a specific key and value. |
| <code><a href="#@winglang/sdk.std.MutJson.tryAsBool">tryAsBool</a></code> | Convert Json element to boolean if possible. |
| <code><a href="#@winglang/sdk.std.MutJson.tryAsNum">tryAsNum</a></code> | Convert Json element to string if possible. |
| <code><a href="#@winglang/sdk.std.MutJson.tryAsStr">tryAsStr</a></code> | Convert Json element to string if possible. |
| <code><a href="#@winglang/sdk.std.MutJson.tryGet">tryGet</a></code> | Optionally returns an specified element from the Json. |
| <code><a href="#@winglang/sdk.std.MutJson.tryGetAt">tryGetAt</a></code> | Optionally returns a specified element at a given index from Json Array. |

---

##### `asBool` <a name="asBool" id="@winglang/sdk.std.MutJson.asBool"></a>

```wing
asBool(): bool
```

Convert Json element to number if possible.

##### `asNum` <a name="asNum" id="@winglang/sdk.std.MutJson.asNum"></a>

```wing
asNum(): num
```

Convert Json element to number if possible.

##### `asStr` <a name="asStr" id="@winglang/sdk.std.MutJson.asStr"></a>

```wing
asStr(): str
```

Convert Json element to string if possible.

##### `get` <a name="get" id="@winglang/sdk.std.MutJson.get"></a>

```wing
Expand Down Expand Up @@ -4569,34 +4734,65 @@ The value of the element to set.

---

#### Static Functions <a name="Static Functions" id="Static Functions"></a>
##### `tryAsBool` <a name="tryAsBool" id="@winglang/sdk.std.MutJson.tryAsBool"></a>

| **Name** | **Description** |
| --- | --- |
| <code><a href="#@winglang/sdk.std.MutJson.deepCopy">deepCopy</a></code> | Creates an immutable deep copy of the Json. |
```wing
tryAsBool(): bool
```

---
Convert Json element to boolean if possible.

##### `deepCopy` <a name="deepCopy" id="@winglang/sdk.std.MutJson.deepCopy"></a>
##### `tryAsNum` <a name="tryAsNum" id="@winglang/sdk.std.MutJson.tryAsNum"></a>

```wing
bring std;
tryAsNum(): num
```

Convert Json element to string if possible.

##### `tryAsStr` <a name="tryAsStr" id="@winglang/sdk.std.MutJson.tryAsStr"></a>

std.MutJson.deepCopy(json: MutJson)
```wing
tryAsStr(): str
```

Creates an immutable deep copy of the Json.
Convert Json element to string if possible.

###### `json`<sup>Required</sup> <a name="json" id="@winglang/sdk.std.MutJson.deepCopy.parameter.json"></a>
##### `tryGet` <a name="tryGet" id="@winglang/sdk.std.MutJson.tryGet"></a>

- *Type:* <a href="#@winglang/sdk.std.MutJson">MutJson</a>
```wing
tryGet(key: str): MutJson
```

to copy.
Optionally returns an specified element from the Json.

###### `key`<sup>Required</sup> <a name="key" id="@winglang/sdk.std.MutJson.tryGet.parameter.key"></a>

- *Type:* str

The key of the element to return.

---

##### `tryGetAt` <a name="tryGetAt" id="@winglang/sdk.std.MutJson.tryGetAt"></a>

```wing
tryGetAt(index: num): MutJson
```

Optionally returns a specified element at a given index from Json Array.

###### `index`<sup>Required</sup> <a name="index" id="@winglang/sdk.std.MutJson.tryGetAt.parameter.index"></a>

- *Type:* num

The index of the element in the Json Array to return.

---




### MutMap <a name="MutMap" id="@winglang/sdk.std.MutMap"></a>

Mutable Map.
Expand Down
11 changes: 10 additions & 1 deletion examples/tests/invalid/json.w
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,13 @@ let jsonObj = Json { boom: bkt };
// ^^^ Expected "Json" elements to be Json Value (https://www.json.org/json-en.html), but got "Bucket" which is not Json Value

let jsonIncomplete = Json;
// ^^^^ Expected a "Json" element
// ^^^^ Expected a "Json" element

let tryNum: num? = j.tryAsStr();
// ^^^^^^^^^^^^ Expected type to be "num?", but got "str?" instead

let tryStr: str? = j.tryAsBool();
// ^^^^^^^^^^^^ Expected type to be "str?", but got "bool?" instead

let tryBool: bool? = j.tryAsNum();
// ^^^^^^^^^^^^ Expected type to be "bool?", but got "num?" instead
Loading
Loading