Source: SearchResponse.mjs

/*
 * Copyright © 2022 by Renaud Guillard (dev@nore.fr)
 * Distributed under the terms of the MIT License, see LICENSE
 */
 
'use strict';
import HeaderMapHandler from './HeaderMapHandler.mjs';

/**
* Search response descriptor
*/
export class SearchResponse {
	/**
	* @param {Object} properties - Notification properties
	* @param {Object} headers - Custom message headers
	*/
	constructor (properties, headers) {

		if (!(typeof (properties) == 'object' && properties)) {
			properties = {};
		}
				
		if (!(typeof (headers) == 'object' && headers)) {
			headers = {};
		}
			
		this.headers = new Proxy (headers, HeaderMapHandler);
		
		if ('S' in this.headers
				&& !('USN' in this.headers)) {
			this.headers.S = this.headers.USN;
		} else if ('USN' in this.headers
				&& !('S' in this.headers)) {
			this.headers.S = this.headers.USN;
		}
		
		for (const name of ['subject', 'usn']) {
			if (!(name in properties)) {
				continue;
			}
			this[name] = properties[name];
		}
	} // constructor
	
	/**
	* @return {string} - HTTP 200 OK message string
	*/
	toString () {
		const lines = ['HTTP/1.1 200 OK'];
		for (const k in this.headers) {
			lines.push (k + ': ' + this.headers[k]);
		}
		
		return lines.join ('\r\n') + '\r\n\r\n';
	}
	
	/**
	* Get search response subject (ST HTTP header field)
	*
	* @return {string} - Search response subject (ST HTTP header field)
	*/
	get subject () {
		return this.headers.ST;
	}

	/**
	* Set the search response subject (ST HTTP header field)
	*
	* @param {string} value - ST header field value
	*/
	set subject (value) {
		this.headers.ST = value;
	}
	
	/**
	* Get service or device USN (S and USN HTTP header field)
	*
	* @return {string} - Service or device USN (S and USN HTTP header field)
	*/
	get usn () {
		return this.headers.USN;
	}

	/**
	* Set service USN (S and USN HTTP header field)
	*
	* @param {string} value - USN and S header field value
	*/
	set usn (value) {
		this.headers.USN = value;
		this.headers.S = value;
	}
}

export default SearchResponse;