Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @:macro class DataCapsule {
- static public function get(_struct:Dynamic):haxe.macro.Expr {
- var capsuleName = '';
- var myfields:Array<String> = Reflect.fields(_struct);
- var myproperties = new Array<Field>();
- var i = 0;
- while(i < myfields.length) {
- capsuleName+=myfields[i];
- var proptype:String = Std.string(Type.getClass(myfields[i]));
- myproperties.push({
- pos: haxe.macro.Context.currentPos(),
- name: myfields[i],
- kind: haxe.macro.Expr.FieldType.FVar(TPath({ sub:null, name:'Int', pack:[], params:[] })),
- access: [haxe.macro.Expr.Access.APublic]
- });
- i++;
- }
- myproperties.push({
- pos: haxe.macro.Context.currentPos(),
- name: 'new',
- kind: haxe.macro.Expr.FieldType.FFun({ret:null,params:[],expr:{expr:EReturn(),pos:haxe.macro.Context.currentPos()},args:[]}),
- access: [haxe.macro.Expr.Access.APublic]
- });
- var newclass = {
- pack : ['fiend','dynamics'],
- name : capsuleName,
- pos : haxe.macro.Context.currentPos(),
- meta : [],
- params : [],
- isExtern : false,
- kind : TDClass(),
- fields : myproperties
- };
- haxe.macro.Context.defineType(newclass);
- return { expr : ENew({pack:['fiend','dynamics'],name:capsuleName,params:[]},[]), pos: haxe.macro.Context.currentPos() };
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement