Skip to content
This repository was archived by the owner on Oct 28, 2024. It is now read-only.

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

Animation

動的配列seq[T]型の別名である、Animation[T]型を提供しています。
Custom Elementが持つフィールドのうち、フレーム再生により値が変化するものはAnimation型で包む必要があります。

Clone this wiki locally