gnablib
Version:
A lean, zero dependency library to provide a useful base for your project.
2 lines • 1.26 kB
JavaScript
/*! Copyright 2023-2025 the gnablib contributors MPL-1.1 */
import{FromBinResult as r}from"../primitive/FromBinResult.js";import{TableName as i}from"./TableName.js";import{Plane as o}from"./types/Plane.js";import{ACmdData as e}from"./CommandData.js";import{ACmdCtrl as n}from"./CommandCtrl.js";import{DateTimeLocal as m}from"../datetime/dt.js";import{BitReader as t}from"../primitive/BitReader.js";import{fromGlScaleBytes as s}from"../primitive/number/xtUint.js";import{ParseProblem as a}from"../error/index.js";export function cmdFromBin(c,f=0){let d,u=f;const p=t.mount(c);try{d=m.deserialize(p)}catch(i){return new r(0,void 0,"cmdFromBin failed to parse DateTime")}u+=8;const l=o.fromBin(c,u);if(!l.success)return new r(0,void 0,"cmdFromBin missing plane: "+l.reason);u+=l.byteLen;const B=c[u];u+=1;const v=s(c.subarray(u));if(v instanceof a)return new r(0,void 0,"cmdFromBin missing userId: "+v.reason);const[b,j]=v;u+=j;const F=i.fromBin(c,u);if(!F.success)return new r(0,void 0,"cmdFromBin missing table: "+F.reason);u+=F.byteLen;const y=s(c.subarray(u));if(y instanceof a)return new r(0,void 0,"cmdFromBin missing extra: "+y.reason);const[w,g]=y;return u+=g,l.value.isCtrl?n.fromBinSub(d,B,b,F.value,w,c,u-f,u):e.fromBinSub(d,B,b,F.value,w,c,u-f,u)}