register-report.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. 'use strict';
  2. const { parseXML, childAttr, required } = require('../parser');
  3. const {
  4. createDoc,
  5. parseReports,
  6. serializeReports,
  7. energyInteropNs,
  8. } = require('../shared');
  9. const { fragment } = require('xmlbuilder2');
  10. async function parse(input) {
  11. const json = await parseXML(input);
  12. const o =
  13. json['oadrPayload']['$$']['oadrSignedObject'][0]['$$'][
  14. 'oadrRegisterReport'
  15. ][0]['$$'];
  16. const result = {
  17. _type: 'oadrRegisterReport',
  18. requestId: required(childAttr(o, 'requestID'), 'requestID'),
  19. reports: parseReports(o['oadrReport'] || []),
  20. };
  21. const venId = childAttr(o, 'venID');
  22. if (venId != null) result.venId = venId;
  23. return result;
  24. }
  25. function serialize(obj) {
  26. const venId =
  27. obj.venId != null
  28. ? fragment()
  29. .ele(energyInteropNs, 'ei:venID')
  30. .txt(obj.venId)
  31. : fragment();
  32. const doc = createDoc()
  33. .ele('@oadr2b', 'oadr2b:oadrPayload')
  34. .ele('oadr2b:oadrSignedObject')
  35. .ele('oadr2b:oadrRegisterReport')
  36. .att(energyInteropNs, 'ei:schemaVersion', '2.0b')
  37. .ele('@pyld', 'pyld:requestID')
  38. .txt(obj.requestId)
  39. .up()
  40. .import(venId)
  41. .import(serializeReports(obj.reports))
  42. .doc();
  43. return doc.end({ headless: true, prettyPrint: false });
  44. }
  45. async function canParse(input) {
  46. const json = await parseXML(input);
  47. const o = json['oadrPayload']['$$']['oadrSignedObject'][0]['$$'];
  48. return o['oadrRegisterReport'] != null;
  49. }
  50. function canSerialize(message) {
  51. return message._type === 'oadrRegisterReport';
  52. }
  53. module.exports = {
  54. parse,
  55. serialize,
  56. canParse,
  57. canSerialize,
  58. };