44 lines
882 B
JavaScript
44 lines
882 B
JavaScript
class Optional {
|
|
constructor(type, condition = true) {
|
|
this.type = type;
|
|
this.condition = condition;
|
|
}
|
|
|
|
decode(stream, parent) {
|
|
let { condition } = this;
|
|
if (typeof condition === 'function') {
|
|
condition = condition.call(parent, parent);
|
|
}
|
|
|
|
if (condition) {
|
|
return this.type.decode(stream, parent);
|
|
}
|
|
}
|
|
|
|
size(val, parent) {
|
|
let { condition } = this;
|
|
if (typeof condition === 'function') {
|
|
condition = condition.call(parent, parent);
|
|
}
|
|
|
|
if (condition) {
|
|
return this.type.size(val, parent);
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
encode(stream, val, parent) {
|
|
let { condition } = this;
|
|
if (typeof condition === 'function') {
|
|
condition = condition.call(parent, parent);
|
|
}
|
|
|
|
if (condition) {
|
|
return this.type.encode(stream, val, parent);
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = Optional;
|