import Serializer from './application';
import { PRIMARY_KEY, SLUG_KEY } from 'consul-ui/models/node';
// TODO: Looks like ID just isn't used at all consider just using .Node for
// the SLUG_KEY
const fillSlug = function(item) {
if (item[SLUG_KEY] === '') {
item[SLUG_KEY] = item['Node'];
}
return item;
};
export default class NodeSerializer extends Serializer {
primaryKey = PRIMARY_KEY;
slugKey = SLUG_KEY;
respondForQuery(respond, query) {
return super.respondForQuery(
cb => respond((headers, body) => cb(headers, body.map(fillSlug))),
query
);
respondForQueryRecord(respond, query) {
return super.respondForQueryRecord(
cb =>
respond((headers, body) => {
return cb(headers, fillSlug(body));
}),
respondForQueryLeader(respond, query) {
// don't call super here we don't care about
// ids/fingerprinting
return respond((headers, body) => {
// This response/body is just an ip:port like `"10.0.0.1:8500"`
// split it and make it look like a `C`onsul.`R`esponse
// popping off the end for ports should cover us for IPv6 addresses
// as we should always get a `address:port` or `[a:dd:re:ss]:port` combo
const temp = body.split(':');
const port = temp.pop();
const address = temp.join(':');
return this.attachHeaders(
headers,
{
Address: address,
Port: port,
},
});