blob: 5a9cae0db8a888bc8349a5a9b3ae656703deadd3 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/**
* @author Igor Ostapenko
*/
import { Buffer } from 'buffer';
/**
* GraphBinary writer.
*/
export default class GraphBinaryWriter {
constructor(ioc) {
this.ioc = ioc;
}
get mimeType() {
return 'application/vnd.graphbinary-v4.0';
}
writeRequest(requestMessage) {
const fields = new Map();
// Extract fields from RequestMessage if it has getter methods
if (typeof requestMessage.getLanguage === 'function') {
const language = requestMessage.getLanguage();
if (language) {
fields.set('language', language);
}
const g = requestMessage.getG();
if (g) {
fields.set('g', g);
}
const bindings = requestMessage.getBindings();
if (bindings && Object.keys(bindings).length > 0) {
fields.set('bindings', bindings);
}
const timeoutMs = requestMessage.getTimeoutMs();
if (timeoutMs !== undefined) {
fields.set('timeoutMs', timeoutMs);
}
const materializeProperties = requestMessage.getMaterializeProperties();
if (materializeProperties) {
fields.set('materializeProperties', materializeProperties);
}
const bulkResults = requestMessage.getBulkResults();
if (bulkResults !== undefined) {
fields.set('bulkResults', bulkResults);
}
// Add any custom fields
const customFields = requestMessage.getFields();
if (customFields) {
customFields.forEach((v, k) => fields.set(k, v));
}
const gremlin = requestMessage.getGremlin();
const bufs = [
Buffer.from([0x84]),
this.ioc.mapSerializer.serialize(fields, false),
this.ioc.stringSerializer.serialize(gremlin, false),
];
return new Uint8Array(Buffer.concat(bufs));
}
// Legacy path: plain object with { gremlin, fields }
const bufs = [
Buffer.from([0x84]),
this.ioc.mapSerializer.serialize(requestMessage.fields || new Map(), false),
this.ioc.stringSerializer.serialize(requestMessage.gremlin, false),
];
return new Uint8Array(Buffer.concat(bufs));
}
}