Skip to content

Commit

Permalink
feat(sdk): random runtime (#396)
Browse files Browse the repository at this point in the history
* +runtime_config
  • Loading branch information
michael-0acf4 authored Aug 25, 2023
1 parent e962786 commit c745a14
Show file tree
Hide file tree
Showing 28 changed files with 548 additions and 145 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,9 @@ snapshot[`typegraphs creation 1`] = `
"1",
"2"
],
"config": {},
"config": {
"key": "value"
},
"as_id": false
},
{
Expand Down Expand Up @@ -723,7 +725,7 @@ snapshot[`typegraphs creation 3`] = `
"idempotent": true
},
"data": {
"code": "file:scripts/three.ts;base64:H4sIAAAAAAAA/+1Y/W7bNhD333qKg/qPtCmKv5IC3lQMaIehQIMFbTYMCAKBtmhbmL5AUYs9w2+yt9mL7Ujqg5LtOO2SYB18QGKRxzsej+TdjzdL4yyiKzdb956N+kiX47H8Rer+Dkf9UW/QH18O+kPRwP7BYNh/3ev3XoCKnBMG0Pu31F3cV0Kv4G2arVm4WHK4opzwdUbh57//ciAKZzTJaQBFElAGfEnhKv0zjCIC18UUufBBjYBfKcvDNIGh23eNV/Dp+t1vZyXv7H1AEx7OQ8omcHX94QzHGMacpTGImRaMZEs/oSsOYZyljAN3Gsa+ca78dOvOSu6ngwJZirauq3HXsrV3ICvQ0pjmLpqcVuPf4fdHxTCMPI3pjXCQB9zNOStm3DIAaSP/CzLThJoTZBPGyNribphwuqDMsh2Iw8QbOZCQmHrmzX1q2k4jx7Et5NKMoy9JhKIZS1dry/xUzmra5fit+lF6aq5j2IYxU9f5mJHER0aYLOSM6tPSjSH+PEoJl2z5ZQnbB24fF1FEPMQ5/HTu4Wa2pBKfJkUspcSHdSu94ajF3XWGlo5pRCpPiQ7KiHCDdztwYHi3x7RGTNnXFnIvUMy96AgqZ1RrFn7ZmH+QqKCaHnuryyQ05zRo7ScN8SYw61bzm2a7fWfbzRbuqvLvUdxndI46q9PU8WBMwki5UHxZ+/b8bbPLatuNH+qzbNlGQOfAcTq/PA2+YObWYqJuiT2RquQp9/QDjqKCkRVT7FcXxc3kVUeOZC1cusrSnFq1yWIeT6hy50Uya/oFaYfRaTG4O03TiJJE95CSCHB5lg3eG8AdEqurWLYrXadus4VmlaK20TvRl1N9nevo9/RI4Ej+H1xgzu/k/9FoODzl/xegR6Zi50kTbLbmS8QLlYRsVUn2yzLzgQC4c7q7QVCFtz3h7uEIqez32qYfDpIkCDy+J0C287NOm50emR/mIcv1rNwJn/W4nM7SJHh44LbVY3cj9F45tXBX7JEfkXgaEEv9wGoCq9vSvjv4VjRKI/QkvBPE8Vdjl9u1PpRQtLy964l9q94+blll2tmA1OqAUgRbmYdkH3xTdpqPWszXk5TyGQsznp/zJaPU5XnvGehI/MfIv/P+G47Gg1P8fwE6P/+cB+CPEcm59vKTLz5UcfDJVwqoZ58AyWxOZhRuxGl7n2QFl5FuOgGE71PKvsMGaRpbwxChFIO9iAUCVIM8pyIqbIA4MIXtRFMmLt8GezZ4o3GuFZ/AR7y1LPheYXUHl/J7kt4nbwSetidycqJPrlmylVxGecGSejZhU+//RHkoMPqzln+O4r/Ly9c79Z/++OJ0/1+A/sv1H6dEZQ+Bz+PQkMhCSP1AxyrOQC+NbEyCiAFvtzltVSFkwWOICMIwpi0NioGFELLyxiNkFzm6p6UxDFqqBDZBQKjgCr79LfNatOxtVQv6BTWYqEkMOqqJFIjBWKNLCde6lOqDiPizSwGH4bEM51jmaNhVz2EkjPUgDdzlWN2ZOq1X/2BotnFVpVODbFhN0pQI9zsgXFdrEl1SG0K6MJiA2C65S1u7o70FA6XOkmFiYy1KV8qsOYlyLMAZe+CyzEjKHnX8fLku8ad2RA5AVXEaFBG2u5DrIZOUw7vTnmoeJzrRiZ6A/gHzrySaABwAAA=="
"code": "file:scripts/three.ts;base64:H4sIAAAAAAAA/+1Y727bNhD3Zz3FQf0ibYpi2U4GeFMxoB2GAg0WtNkwIAgE2qJsofoHilrsGX6Tvc1ebEdS/23H6ZYEa+EDEos83o/HI3l3vHkaZxFd2dl68Gw0RLqcTOQvUv93NB5PBs5wcukMR9gQ/Y4zcsaD4eAFqMg5YQCD/0r9xX0h9ArepNmahYslhyvKCV9nFH75+y8LonBOk5z6UCQ+ZcCXFK7SP8MoInBdzJAL79UI+I2yPEwTGNlDW3sFH6/f/n5W8s7e+TThYRBSNoWr6/dnOEbTApbGIGZaMJItvYSuOIRxljIO3GoY+8bZ8tOuOyu5nw8KZCnquq7GXcvW3oGsQE1jmtuoclqNf4vfHxRD0/I0pjfCQC5wO+esmHNDA6SN/C9ITxOqT5FNGCNrg9thwumCMsO0IA4Td2xBQmLq6jf3qW5ajRzHtpBLM462JBGKZixdrQ39Yzmrbpbjt+pH4dRcSzM1ba6u8zEliYeMMFnIGdWn0VaGeEGUEi7Z8ssQujv2EBdRRDzEObw0cHEzO1KJR5MillLiw7iV1rDU4u56Q0vDNCKVpUQHZUSYwb11LBjdWTBPkyBcuBv9E13jYP0PEhVU3+7RucFTinfR7AvEsy+6unjKSpUxhME25QwNjtmZLKE5p35no2mIV4QZty2DthZl3plms7e7UN49inuMBohZHbOeaWMSRsq24svYdxjeNNuvzoP2Y33IDVPzaQAcp/PKY+IJZm4spur6mFMJJY+/2z75KCoYWTHDfnWD7Ez6AORI1sKmqyzNqVGrLOZxBZQdFMm86RfUOqVWh8HtWZpGlCRtCykJH5dnmOC+BtwhsbqKZdrSdOqaG6hWKWpqgxMdpfo6197v6TOBI/HfucCY34v/4/FodIr/L0CPDMXWkwbYbM2XmC9UErJVBdl/F5kP+Lmd0933dcqL7fFqDztCpb/bVf2wLyS+7/I9frAbn9u02emRYSAIWd6Oyj0vWY/LKQZM/+GB206P2XfEe+XUwm2xR15E4plPDPUDqymsbkv97uBb0SiVaMfaHV+Nvy12uV3rQ3GjFZ53LbFv1dvHLauMLhuQqBYoINjKcCP74JuyU3/UYr6c2JPPWZjx/JwvGaU2zwfPQEf8P3r+cd//j8YT5+T/X4DOzz/nAfhTRHLeevnJFx9CHHzylQLq2SdyYRaQOYUbcdreJVnBpaebTQGz9Bll32ODNI2tpglXis5e+AKRO4M8p8IrbIBYMIPttAUmLt8GezbivcAxckzhA95a5v+gUnILl/IpSe+T1yJtNqdyctKevKXJVnIZ5QVL6tmEToOvifJQpOLPWv45mv9dXn63U/8ZTi5O9/8F6P9c/7HKrOyh5PN4akhkIaR+h2MVx2mXRjY6wYwBb7c+61QhZMFjhBmEps06CIqBhRCycidjZBc5mqeDGPodKJGbYEKo0hV84hv6tWiZ26oW9Csi6IgkBh1FIgXmYKzBUsI1loI+mBF/9ov/cHos3TlWMxp21XM4E8Z6UCu5y7G6M7M6j3tnpHfzqgqzlbJhNakFIsxvgTBdjSS6JBqmdKE/BbFdcpe2Zg+9kwZKzJKhY2MtSldKrYBEORbgtD3psoxISh91/Dy5LvGndkQOQKg49YsI2/2U6yGVlMH7055KGyc60YmegP4B3B1ICAAcAAA="
}
},
{
Expand Down Expand Up @@ -877,7 +879,9 @@ snapshot[`typegraphs creation 4`] = `
"1",
"2"
],
"config": {},
"config": {
"key": "value"
},
"as_id": false
},
{
Expand Down Expand Up @@ -1507,7 +1511,7 @@ snapshot[`typegraphs creation 6`] = `
"idempotent": true
},
"data": {
"code": "file:scripts/three.ts;base64:H4sIAAAAAAAA/+0Y7W7bRsy//RSE/kTaZNmWnQzQ1mJAsx8FOiRoM2BAEBhn6+wIk07C6bTYMPQme5u92MjT6cOO16xo422piQSSePw68o6kuUiTLOZrT+W9Z4MRwsV0qp8I+0/fH130xqPpxXjkj/wJ4cdjf/Rdb9Q7AhS5YhKg97mwv7n/CQyH8CbNNjJa3Sv4mSumNhmHqz//cCGOFlzkPIRChFyCuufwU8xyFS3gXbUEvjfy+ijiw/XlrwODHLwNuVDRMuIyqBkGSNgnwpury6sACmSNkiyVChKW9c3rFq5T1LlxQeEfmrGSLLuHEpYyTcD6sUENUUE6zOVimKQhnlzr+1bEJS69L1B/wj/KKSuaXGMqGf1FKnIFeZrwG3LCK1BermSxUPa2D5AKHiCGSck2tvIiofiKS9txUWsSiQAmUNK7YAkSWjcPqQWl4yKnekiJM81UlAoWI3Mm0/XGtj4YVZaDdF3mZgElNIYtqqt6yDY2w49IrIIKjW+21sxmyzhlitD6xTamjl1IilhFKO9qGYBvDGVixkWREDk9Z/athbu2XLBwC9ZdTWO23tDWrtgCYbhktM8AblGLf1eLrixpeGpz9ji8c+TxzluuapNBZ7vwO4sL3spwDK3gueJhN0Q8wjMr7duOTzrWOneO08akI2L2gHwzydEx9VmonZOwKNbeoRd7L2hv2viYuDXnzrYUih6YCA4In6Nb7ZUDr14DRbAKMR1GjK3gD92DbKOsmiIr5khQXRQPP/BJy7i+8vg6S3OuDwQeOlQYaIHeshALWyOhe4hcg1LePE1jzkTlBIKteRJ9SHuztaEYATwNzRpfLjnFZguK4dGzBB0WvHUsR2dtarqyenE8cmtluI2Ga13kJfrvneBfgjoNzOqE+AydwBP1f3zu+/v1fzLxx6f6fwQ4Zv3/j9T51oyNuk/FJ0nJNIvpF/bTe32XBjX5oRT/Nwn8EyqANsHQ7GzhcCFgoS6K3SLQKabWMpK5sjrlFKt9zlFVaD2usRVzTWgQxifkvXcsmYfMtmL9hHUA69szreHsDr6lj0r02Z3lfKQsQN2dbA5UsC9r/LapcFstzIWKv9Rh0yj4xuCsF1jL8oWMMpUP1b3k/Jl+BT6R/zHzT/bzvz+ZnvL/MeCo+R87b7lkCw43dNreiqxQOjPOA8CfAXMuKcux9qPs9ymVYbKmBECdOuhzSqlgC8yFOZRBRxhdw20Z6EuNutbYm77HmyvDH6ofAC5u5TeRPojXdJOdQCtnXeUdS0q9KrkqpGi0kU29lwR5RL8HnnX88+T8B6/7o/nPyJ+e7v8R4Cvs/8w4hekhSjMNaOc/453pir74u1OOaoRCQ5PueGa+I6+hwkkLwz5oOunS4gBM7s9worCrRbcU2MXp0YcZF13jp7U3dPgFJe1MiYjnH4hmBTZtUo/i5K5EreXw/OLLzy3qZV0acA7T0tSYw02tHsa1rWGOo6a524wtdoYWY9+MLMqdtq2WbzpBPaNrBWq3aF8+lkprWjIGmTxLMdYBLZ2DmrTUrHq38GNDA7XKtiWL82r6p22gQmasqA563fPi/h69NQHTbCgTL0kRE2K/p3uJfesJTnCCE5zg8+AvE6v9FQAeAAA="
"code": "file:scripts/three.ts;base64:H4sIAAAAAAAA/+0Y7W7bRsy//RSE/kTabNmWnf5Q12JAsx8FOiRoM2BAYBhn6+QIlU7C6bTYMPQme5u92Mg7SZY/1qxoYmypiQSSeDySR/JImos0yWK+clXeeTYYIryaTPQTYf/peZfjzmg4eTUaekNvTPjRyBuNOsPOCaDIFZMAnW+F/cP9T2AwgHdptpbR8l7Br1wxtc44XP/1Zw/iaMFFzgMoRMAlqHsOv8QsV9ECPpgl8Nyh20UWn26ufu9XyP77gAsVhRGXfr2hj4RdIry9vrr2ocCtUZKlUkHCsm71uoGbFGWue6DwD9VYSpbdQwmhTBOwfm5QAxSQDnK5GCRpgJFrvd6yuMKljwXKT/gXd0pDk2uM4dFdpCJXkKcJvyUjvAHl5koWC2VvugCp4D5imJRsbSs3EoovubSdHkpNIuHDGEp6FyxBQuv2IbWgdHq4Uz2ktDPNVJQKFuPmTKartW19qkRZDtK1NzcLyKFRbGGu6jHd2Aw/IrH0DRrfbC2ZzcI4ZYrQ+sWuVB31ICliFSG/69AHr1KUiRkXRULk9JzZdxae2uqBhUewpjVNdfSGtjbFBgjDJaNz+nCHUrypNgruA9RfhBGquIHPfI2H/IPFBZ2QuJZtdRvGtc57bN1LZOxeTptdxhJ+yyagmW95OBWt4LniQduPPMLAlvZdy3CtIzlTx9k6rsVi9oD7ZpKj9eqAqS2YsCjWJqQXe8+z77ZOrJzbBKdtKWTdr9zcJ3yOtreXDrx5q21o4oAiFgNA8Id2tNvIq6bIijkSmNvk4gc+aRnXly5fZWnObeMSEuhrhm5YiIWtkdCOtF6FUu48TWPOhDECwaZ6En1AZ7O1ougBDJlmjYchJ99sQDF0viUoovBqshyNta7pSvPiuGRWo7iNijsmNl536b9zhqeHOg3M6oT4DJ3AI/V/dOl5+/V/PPbO9f8UcMr6/x+p81s11uo+FV/FJdNbqn5hP3PXd6lfkx/L3v+Qm78iuWsVKpqdIxzP8SzQ9a6d31t10gojmSurVSmx2uccRQXWYfk0m2vCClHZhKz3gSXzgNlWrJ+w8mF1d6ElXEzhR/owrC+mlvOFjA91d7I+UpyeVvlNU7w2mlkPzP5Su02j4IcKZ73AMpUvZJSpfKDuJefP9CvwkfyPmf/g9583npzz/yngpPkfm2oZsgWHW4q29yIrlM6Mcx+ww59zSVmObT/KbpdSGSZrSgDUhIOOU0oFG2A9mEPpt5jRNdyUvr7UKGuFbedHvLky+Mn09j08ymeRPoi3dJMdXwtnbeEtTUq9KrkqpGikkU6dlwR5RK3+s45/Hp3/4HU/mP8Mvcn5/p8AvsP+rxqnMD1EaX7ob+c/o53pir74u1MOM0KhoUl7PDPf4ddQ4aSFYR80GbdpcQAm92c4UdCWolsK7OL0VKMaF93gp7U3T/gNOe1MiWjPv2DNCmzapB7FyV2OWsrx0cTTjyTqZV0acMSypakxx5taPYzbtoY5jprmvWYisTOPGHnVNKLcadtq/lUnqGd0W4baLNqWh1xpTXNGJ5NlycfaoaVzVJLmmpl3Cz/WNFAzuoUszs30T+tAhazSwgR63fPi+Q7eGofpbcgTL0kRE2K/p3uJfesZznCGM5zh2+BvL2QQxQAeAAA="
}
},
{
Expand Down
4 changes: 3 additions & 1 deletion typegate/tests/e2e/typegraph/typegraphs/deno/complex.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ const complexType = t.struct({
a_string: t.string(),
a_float: t.float({ min: 1, multipleOf: 2 }),
an_enum: t.enum_(["one", "two"]),
an_integer_enum: t.integer({ enumeration: [1, 2] }),
an_integer_enum: t.integer({ enumeration: [1, 2] }, {
config: { key: "value" },
}),
a_float_enum: t.float({ enumeration: [1.5, 2.5] }),
a_struct: t.struct({ value: t.float() }),
nested: t.array(t.either([t.string(), t.integer()])).optional(),
Expand Down
2 changes: 1 addition & 1 deletion typegate/tests/e2e/typegraph/typegraphs/python/complex.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
"a_string": t.string(),
"a_float": t.float(min=1.0, multiple_of=2.0),
"an_enum": t.enum(["one", "two"]),
"an_integer_enum": t.integer(enumeration=[1, 2]),
"an_integer_enum": t.integer(enumeration=[1, 2], config={"key": "value"}),
"a_float_enum": t.float(enumeration=[1.5, 2.5]),
"a_struct": t.struct({"value": t.float()}),
"nested": t.array(t.either([t.string(), t.integer()])).optional(),
Expand Down
80 changes: 41 additions & 39 deletions typegate/tests/random/random.py
Original file line number Diff line number Diff line change
@@ -1,47 +1,49 @@
from typegraph import TypeGraph, policies, t
from typegraph.runtimes.random import RandomMat, RandomRuntime
from typegraph_next import t, typegraph
from typegraph_next.graph.typegraph import Graph
from typegraph_next.policy import Policy
from typegraph_next.runtimes.random import RandomRuntime

with TypeGraph(name="random") as g:
runtime_1 = RandomRuntime(seed=1)
runtime_2 = RandomRuntime(seed=1)
rec = t.struct(
{
"uuid": t.uuid(),
"int": t.integer(),
"str": t.string(),
"email": t.email(),
}
)

rec = t.struct(
{
"uuid": t.uuid(),
"int": t.integer(),
"str": t.string(),
"email": t.email(),
}
)
users = t.struct(
{
"id": t.uuid(),
"name": t.string(config={"gen": "name"}),
"age": t.integer(config={"gen": "age", "type": "adult"}),
"address": t.struct(
{
"street": t.string(config={"gen": "address"}),
"city": t.string(config={"gen": "city"}),
"postcode": t.string(config={"gen": "postcode"}),
"country": t.string(config={"gen": "country", "full": True}),
}
),
}
)

users = t.struct(
{
"id": t.uuid(),
"name": t.string().config(gen="name"),
"age": t.integer().config(gen="age", type="adult"),
"address": t.struct(
{
"street": t.string().config(gen="address"),
"city": t.string().config(gen="city"),
"postcode": t.string().config(gen="postcode"),
"country": t.string().config(gen="country", full=True),
}
),
}
).named("User")
list = t.struct(
{
"array_of_array_of_names": t.array(t.array(t.string(config={"gen": "name"}))),
}
)

list = t.struct(
{
"array_of_array_of_names": t.array(t.array(t.string().config(gen="name"))),
}
).named("RandomList")

public = policies.public()
@typegraph()
def test_random(g: Graph):
runtime_1 = RandomRuntime(seed=1)
runtime_2 = RandomRuntime(seed=1)

pub = Policy.public()

g.expose(
randomRec=t.gen(rec, RandomMat(runtime=runtime_1)).add_policy(public),
randomUser=t.gen(g("User"), RandomMat(runtime=runtime_1)).add_policy(public),
randomList=t.gen(g("RandomList"), RandomMat(runtime=runtime_2)).add_policy(
public
),
randomRec=runtime_1.gen(rec).with_policy(pub),
randomUser=runtime_1.gen(users).with_policy(pub),
randomList=runtime_2.gen(list).with_policy(pub),
)
19 changes: 19 additions & 0 deletions typegate/tests/random/random.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// Copyright Metatype OÜ, licensed under the Elastic License 2.0.
// SPDX-License-Identifier: Elastic-2.0

import { Policy, t, typegraph } from "@typegraph/deno/src/mod.ts";
import { RandomRuntime } from "@typegraph/deno/src/runtimes/random.ts";

typegraph("random", (g) => {
const random = new RandomRuntime({ seed: 1, reset: "" });
const pub = Policy.public();

g.expose({
test1: random.gen(
t.struct({
email: t.email(),
country: t.string({}, { config: { gen: "country", full: true } }),
}),
).withPolicy(pub),
});
});
100 changes: 73 additions & 27 deletions typegate/tests/random/random_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

import { gql, Meta } from "../utils/mod.ts";

Meta.test("Random", async (t) => {
Meta.test("Python: Random", async (t) => {
const e = await t.engine("random/random.py");

await t.should("work", async () => {
Expand Down Expand Up @@ -67,34 +67,80 @@ Meta.test("Random", async (t) => {
array_of_array_of_names
}
}
`.expectData(
{
randomList: {
array_of_array_of_names: [
[
"Clayton Tate",
"Martin Neal",
"Charlie Soto",
"Jared Ramirez",
"Hilda Bowers",
"Derek French",
],
[
"Jessie Garza",
"Ricardo Maxwell",
"Phillip Curtis",
"Wesley Sparks",
"Russell Lucas",
"Tillie Cohen",
"Herman Burgess",
"Carolyn Potter",
"Howard Patton",
"Ethan Brady",
`
.expectData(
{
randomList: {
array_of_array_of_names: [
[
"Olivia Smith",
"Sean Atkins",
"Arthur Parker",
"Jack Chavez",
"Hunter Franklin",
"Betty Gill",
"Louis Reeves",
"Rosa Hansen",
"Blanche White",
"Essie Marsh",
],
[
"Caleb Meyer",
"Glen Hayes",
"Bernice Delgado",
"Bernice Rose",
"Ronnie Vargas",
],
[
"Marguerite Tyler",
"Erik Robinson",
"Gregory King",
"Essie Collins",
"Henrietta Cummings",
"Esther Wade",
"Shane Holmes",
"Jacob Warner",
"Gussie Castillo",
],
["Julian Curry"],
[
"Lelia Daniels",
"Gabriel Webster",
"Ronald Baker",
"Dale Owen",
"Harry Poole",
"Frank Ward",
"Margaret Perez",
"Verna Wallace",
"Flora Daniels",
"Derek Allen",
],
],
],
},
},
)
.on(e);
});
});

Meta.test("Deno: Random", async (t) => {
const e = await t.engine("random/random.ts");

await t.should("work", async () => {
await gql`
query {
test1 {
email
country
}
}
`
.expectData({
test1: {
email: "[email protected]",
country: "Guyana",
},
},
)
})
.on(e);
});
});
32 changes: 31 additions & 1 deletion typegraph/core/src/conversion/runtimes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use crate::errors::Result;
use crate::global_store::Store;
use crate::runtimes::{
DenoMaterializer, GraphqlMaterializer, Materializer as RawMaterializer, PythonMaterializer,
Runtime, WasiMaterializer,
RandomMaterializer, Runtime, WasiMaterializer,
};
use crate::wit::core::RuntimeId;
use crate::wit::runtimes::{HttpMethod, MaterializerHttpRequest};
Expand All @@ -14,6 +14,7 @@ use common::typegraph::runtimes::deno::DenoRuntimeData;
use common::typegraph::runtimes::graphql::GraphQLRuntimeData;
use common::typegraph::runtimes::http::HTTPRuntimeData;
use common::typegraph::runtimes::python::PythonRuntimeData;
use common::typegraph::runtimes::random::RandomRuntimeData;
use common::typegraph::runtimes::wasmedge::WasmEdgeRuntimeData;
use common::typegraph::runtimes::KnownRuntime;
use common::typegraph::{runtimes::TGRuntime, Effect, EffectType, Materializer};
Expand Down Expand Up @@ -265,6 +266,31 @@ impl MaterializerConverter for PythonMaterializer {
}
}

impl MaterializerConverter for RandomMaterializer {
fn convert(
&self,
c: &mut TypegraphContext,
s: &Store,
runtime_id: RuntimeId,
effect: WitEffect,
) -> Result<Materializer> {
let runtime = c.register_runtime(s, runtime_id)?;
let RandomMaterializer::Runtime(ret) = self;
let data = serde_json::from_value(json!({
"runtime": ret.runtime,
}))
.map_err(|e| e.to_string())?;

let name = "random".to_string();
Ok(Materializer {
name,
runtime,
effect: effect.into(),
data,
})
}
}

impl MaterializerConverter for WasiMaterializer {
fn convert(
&self,
Expand Down Expand Up @@ -332,6 +358,10 @@ pub fn convert_runtime(
Runtime::Python => Ok(TGRuntime::Known(PythonWasi(PythonRuntimeData {
config: None,
}))),
Runtime::Random(d) => Ok(TGRuntime::Known(Random(RandomRuntimeData {
seed: d.seed,
reset: d.reset.clone(),
}))),
Runtime::WasmEdge => Ok(TGRuntime::Known(WasmEdge(WasmEdgeRuntimeData {
config: None,
}))),
Expand Down
31 changes: 17 additions & 14 deletions typegraph/core/src/conversion/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

use common::typegraph::{TypeNode, TypeNodeBase};
use enum_dispatch::enum_dispatch;
use indexmap::IndexMap;

use crate::errors::Result;
use crate::typegraph::TypegraphContext;
Expand All @@ -14,26 +15,28 @@ pub trait TypeConversion {
}

/// takes converted runtime id
pub fn gen_base(name: String, runtime_id: u32) -> TypeNodeBase {
pub fn gen_base(
name: String,
runtime_config: Option<Vec<(String, String)>>,
runtime_id: u32,
enumeration: Option<Vec<String>>,
) -> TypeNodeBase {
let mut config: Option<IndexMap<String, serde_json::Value>> = None;
if let Some(cfg_list) = runtime_config {
let mut map = IndexMap::new();
for (k, v) in cfg_list.iter() {
map.insert(k.to_string(), serde_json::from_str(v).unwrap());
}
config = Some(map);
}
TypeNodeBase {
config: Default::default(),
config: config.unwrap_or(Default::default()),
description: None,
enumeration: None,
enumeration,
injection: None,
policies: Vec::new(),
runtime: runtime_id,
title: name,
as_id: false,
}
}

pub fn gen_base_enum(
name: String,
runtime_id: u32,
enumeration: Option<Vec<String>>,
) -> TypeNodeBase {
TypeNodeBase {
enumeration,
..gen_base(name, runtime_id)
}
}
Loading

0 comments on commit c745a14

Please sign in to comment.