'use strict'; const { parseXML, childAttr, required } = require('../parser'); const { createDoc, serializeReportRequests, parseReportRequests, } = require('../shared'); async function parse(input) { const json = await parseXML(input); const o = json['oadrPayload']['$$']['oadrSignedObject'][0]['$$'][ 'oadrCreateReport' ][0]['$$']; const requestId = required(childAttr(o, 'requestID'), 'requestID'); const result = { _type: 'oadrCreateReport', requestId: requestId, }; result.requests = parseReportRequests(o['oadrReportRequest'] || []); return result; } function validate(obj) { if (!obj.requestId) { throw new Error('Missing requestId'); } } function serialize(obj) { validate(obj); const doc = createDoc() .ele('@oadr2b', 'oadr2b:oadrPayload') .ele('oadr2b:oadrSignedObject') .ele('oadr2b:oadrCreateReport') .att('@ei', 'ei:schemaVersion', '2.0b') .ele('@pyld', 'pyld:requestID') .txt(obj.requestId) .up() .import(serializeReportRequests(obj.requests)) .up() .doc(); return doc.end({ headless: true, prettyPrint: false }); } async function canParse(input) { const json = await parseXML(input); const o = json['oadrPayload']['$$']['oadrSignedObject'][0]['$$']; return o['oadrCreateReport'] != null; } function canSerialize(message) { return message._type === 'oadrCreateReport'; } module.exports = { parse, serialize, canParse, canSerialize, };