Skip to main content

melina: meta/xml converter

Project description

Melina can convert meta.xml to meta language (similar to protobuf) and back.

melina --meta-out DIR1 meta.xml  # to meta
melina --xml-out DIR2 meta.meta  # back to xml

melina --meta-stdout meta.xml > x.meta  # or to stdout

This is how melina language looks like:

/// pdmeta: "1.1", domain: "f", product: "b", release: "AX", version: "1.5", revision: "198"

// line above is a header with meta module versions.
// It needs to be the first symbol in file and start with '///'

mo SCALAR
{
    // you can define managed objects like structs in C++

    bool x;
    int y;
    string z;
};

mo COMPLEX
{
    // enum/struct fields contain definition of enum/struct
    // enum/struct name should begin with small letter - after all it's a name of variable

    enum x
    {
        A = 1,
        B,
        C = 2
    };

    struct y
    {
        int z;
        struct v { int w; };
    };
};

mo CARDINALITY
{
    // you can define cardinality of each managed object or struct field

    int x; // required by default
    optional int y; // optional integer, may be null
    repeated int z; // list of integers
    repeated(15) int z; // at most 15 'z' integers
};

mo DEFAULTS
{
    // bool, int, string, enum can have default values

    bool x [default = true];
    int y [default = 12];
    string z [default = "foo bar"];
    enum v [default = 12] { A = 1, B = 12 };
};

mo RANGES
{
    // int/string fields can specify allowed ranges
    // if int has a 3-param specifier, it's considered a "float"

    int(0..12) x;  // allowed integers from 0 to 12 inclusive
    int(-0.5, 0.5, 0.001) y;  // allowed floats from -0.5 to 0.5 inclusive with step 0.001
    string(0..10) z; // allowed string length from 0 to 10 chars inclusive
};

mo UNITS
{
    // integers can have units (for documentational purposes)

    int y [units = "kbps"];
};

/**
 * Example managed object description.
 */
mo COMMENTS
{
    // you can use C++-style '//foo' or '/*foo*/' comments in meta files
    // doxygen-style comments '///foo' and '/**foo*/' are treated as mo/field description,
    // if present immediately above or rightwards of mo/field

    int x;  /// Example scalar field description
    int y;  /** Example scalar field description */

    /**
     * Example complex type description.
     */
    struct z
    {
    };

    /// Example complex type description.
    struct v
    {
    };
};

mo CHILDREN -> FIRST, SECOND, THIRD(10)
{
    // managed object can have children defined
    // children can have max count specified in parens (at most 10 THIRD children)
};

mo(hc) FLAGS
{
    // each managed object has: hidden('h'), create('c'), update('u'), delete('d') flags.
    // If not specified, hidden is assumed false, rest is assumed true.
    // Specification may be provided as 'hcud' letters in parens.
};

Project details


Release history Release notifications

This version
History Node

0.1

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
melina-0.1-py2.py3-none-any.whl (17.3 kB) Copy SHA256 hash SHA256 Wheel py2.py3 Jul 3, 2017
melina-0.1.tar.gz (14.0 kB) Copy SHA256 hash SHA256 Source None Jul 3, 2017

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page