This repository was archived by the owner on Oct 28, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Custom Element
Mutsuha Asada edited this page Aug 1, 2022
·
6 revisions
mumlが提供するmumlBuilderマクロを利用することで、開発者は新しい独自のElementを追加することができます。
このマクロはCustom Elementの型を与えることで、フィールドを読み出すための煩雑なJSON解析処理を自動生成します。
独自のElementとそれに対するフレーム処理はmock-upのプラグイン上で統合されます。
Custom ElementはmumlRootElement型を継承するref objectである必要があります。これは、全てのElementをイテレータによって取得することができるようにするためです。
一方で、Custom Elementのフィールドとして存在する構造体はobject型であることが推奨されます。ref object型でも動作しますが、今後のアップデートでコンパイルエラーを検出するように変更する予定です。
type
myEnum = enum
me1, me2, me3
nest2 = object
nest2_field1: int8
nest2_field2: myEnum
nest1 = object
nest1_field1: float
nest1_field2: nest2
newElement = ref object of mumlRootObj
field1: int
field2: string
field3: nest1
mumlBuilder(newElement)次のようなJSONを上のnewElementに変換することができます。
let newElementMuml = %* {
"field1": 10,
"field2": "hello!",
"field3": {
"nest1_field1": 2.5,
"nest1_field2": {
"nest2_field1": 10,
"nest2_field2": "me1"
}
}
}
echo newElement(parse_newElement(newElementMuml))[]
# => (field1: 10, field2: "hello!", field3: (nest1_field1: 2.5, nest1_field2: (nest2_field1: 10, nest2_field2: me1)), default_content: "")現在、mumlがサポートしている型は以下の通りです。構造体は何度ネストしても解釈できますが、以下の型のみで構成されている必要があります。
int, int8, float, string, enum動的配列seq[T]型の別名である、Animation[T]型を提供しています。
Custom Elementが持つフィールドのうち、フレーム再生により値が変化するものはAnimation型で包む必要があります。