donet_core

Function read_dc

source
pub fn read_dc<'a>(
    config: DCFileConfig,
    input: String,
) -> Result<DCFile<'a>, DCReadError>
Expand description

Front end to the donet-core DC parser pipeline.

ยงExample Usage

The following is an example of parsing a simple DC file string, printing its DC hash in hexadecimal notation, and accessing the elements of a defined Distributed Class:

use donet_core::dcfile::DCFile;
use donet_core::dclass::DClass;
use donet_core::dconfig::*;
use donet_core::read_dc;

let dc_file = "

from game.ai import AnonymousContact/UD
from game.ai import LoginManager/AI
from game.world import DistributedWorld/AI
from game.avatar import DistributedAvatar/AI/OV

typedef uint32 doId;
typedef uint32 zoneId;
typedef uint64 channel;

dclass AnonymousContact {
  login(string username, string password) clsend airecv;
};

dclass LoginManager {
  login(channel client, string username, string password) airecv;
};

dclass DistributedWorld {
  create_avatar(channel client) airecv;
};

dclass DistributedAvatar {
  set_xyzh(int16 x, int16 y, int16 z, int16 h) broadcast required;
  indicate_intent(int16 / 10, int16 / 10) ownsend airecv;
};

";

let dc_conf = DCFileConfig::default();
let dc_read = read_dc(dc_conf, dc_file.into());

if let Ok(dc_file) = dc_read {
    // Print the DC File's 32-bit hash in hexadecimal format.
    println!("{}", dc_file.get_pretty_hash());

    // TODO: Retrieve the `DistributedAvatar` dclass by ID.
    //let class: &DClass = dc_file.get_dclass_by_id(3);

    // TODO: Print the identifier of the dclass.
    //println!("{}", class.get_name());
}

The output of the program would be the following:

0x9c737148
DistributedAvatar