module Osmocom_CTRL_Types {

type charstring CtrlVerb ("GET", "SET") with {
	/* see https://www.eclipse.org/forums/index.php/t/1088893/ on why this
	 * match expression is needed here */
	variant "TEXT_CODING(,convert=upper_case,'((GET)|(SET))',case_insensitive)"
};

type charstring CtrlReplyVerb ("GET_REPLY", "SET_REPLY") with {
	variant "TEXT_CODING(,convert=upper_case,'((GET_REPLY)|(SET_REPLY))',case_insensitive)"
};

type charstring CtrlId	(pattern "\d#(1,9)");
type charstring CtrlVariable (pattern "[^, \{\}\[\]\(\)<>\|~\\\^`'\"\?=;/\+&%$\#!]#(1,)");
type charstring CtrlValue (pattern "[^ ]#(0,)");
type charstring CtrlReason;


type record CtrlCommand {
	CtrlVerb	verb,
	CtrlId		id,
	CtrlVariable	variable,
	CtrlValue	val optional	/* only for SET */
} with {
	variant "SEPARATOR(' ',)"
};

type record CtrlResponse {
	CtrlReplyVerb	verb,
	CtrlId		id,
	CtrlVariable	variable,
	CtrlValue	val
} with {
	variant "SEPARATOR(' ',)"
};

type record CtrlError {
	CtrlId		id,
	CtrlReason	reason
} with {
	variant "BEGIN('ERROR ',,case_insensitive)"
	variant "SEPARATOR(' ',)"
};

type record CtrlTrap {
	CtrlVariable	variable,
	CtrlValue	val
} with {
	variant "BEGIN('TRAP 0 ',,case_insensitive)"
	variant "SEPARATOR(' ',)"
};

type union CtrlMessage {
	CtrlCommand	cmd,
	CtrlResponse	resp,
	CtrlError	err,
	CtrlTrap	trap
};

external function enc_CtrlMessage(in CtrlMessage id) return charstring
	with { extension "prototype(convert) encode(TEXT)"};

external function dec_CtrlMessage(in charstring id) return CtrlMessage
	with { extension "prototype(convert) decode(TEXT)"};


template CtrlMessage ts_CtrlMsgGet(CtrlId id, CtrlVariable variable) := {
	cmd := {
		verb := "GET",
		id := id,
		variable := variable,
		val := omit
	}
};

template CtrlMessage ts_CtrlMsgSet(CtrlId id, CtrlVariable variable, CtrlValue val) := {
	cmd := {
		verb := "SET",
		id := id,
		variable := variable,
		val := omit
	}
}

template CtrlMessage tr_CtrlMsgGetRepl(template CtrlId id, template CtrlVariable variable := ?) := {
	resp := {
		verb := "GET_REPLY",
		id := id,
		variable := variable,
		val := ?
	}
}

template CtrlMessage tr_CtrlMsgSetRepl(template CtrlId id, template CtrlVariable variable := ?,
			   template CtrlValue val := ?) := {
	resp := {
		verb := "SET_REPLY",
		id := id,
		variable := variable,
		val := val
	}
}

template CtrlMessage tr_CtrlMsgTrap(template CtrlVariable variable := ?,
			template CtrlValue val := ?) := {
	trap := {
		variable := variable,
		val := val
	}
}

template CtrlMessage tr_CtrlMsgError(template CtrlId id := ?, template CtrlReason reason := ?) := {
	err := {
		id := id,
		reason := reason
	}
}


} with { encode "TEXT" }
