mirror of
https://github.com/public-transport/db-vendo-client.git
synced 2025-02-23 15:19:35 +02:00
pull out bitmask parsing from profiles
This commit is contained in:
parent
3fb0943680
commit
ed0dfd06dd
6 changed files with 42 additions and 42 deletions
14
format/products-bitmask.js
Normal file
14
format/products-bitmask.js
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
const createFormatBitmask = (modes) => {
|
||||||
|
const formatBitmask = (products) => {
|
||||||
|
let bitmask = 0
|
||||||
|
for (let product in products) {
|
||||||
|
if (products[product] === true) bitmask += modes[product].bitmask
|
||||||
|
}
|
||||||
|
return bitmask
|
||||||
|
}
|
||||||
|
return formatBitmask
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = createFormatBitmask
|
|
@ -4,11 +4,15 @@ const crypto = require('crypto')
|
||||||
|
|
||||||
const _formatStation = require('../../format/station')
|
const _formatStation = require('../../format/station')
|
||||||
const _parseLine = require('../../parse/line')
|
const _parseLine = require('../../parse/line')
|
||||||
|
const createParseBitmask = require('../../parse/products-bitmask')
|
||||||
|
const createFormatBitmask = require('../../format/products-bitmask')
|
||||||
const {accessibility, bike} = require('../../format/filters')
|
const {accessibility, bike} = require('../../format/filters')
|
||||||
|
|
||||||
const modes = require('./modes')
|
const modes = require('./modes')
|
||||||
const formatLoyaltyCard = require('./loyalty-cards').format
|
const formatLoyaltyCard = require('./loyalty-cards').format
|
||||||
|
|
||||||
|
const formatBitmask = createFormatBitmask(modes)
|
||||||
|
|
||||||
const transformReqBody = (body) => {
|
const transformReqBody = (body) => {
|
||||||
body.client = {id: 'DB', v: '16040000', type: 'IPH', name: 'DB Navigator'}
|
body.client = {id: 'DB', v: '16040000', type: 'IPH', name: 'DB Navigator'}
|
||||||
body.ext = 'DB.R15.12.a'
|
body.ext = 'DB.R15.12.a'
|
||||||
|
@ -87,7 +91,7 @@ const formatProducts = (products) => {
|
||||||
return {
|
return {
|
||||||
type: 'PROD',
|
type: 'PROD',
|
||||||
mode: 'INC',
|
mode: 'INC',
|
||||||
value: modes.stringifyBitmask(products) + ''
|
value: formatBitmask(products) + ''
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,7 +106,7 @@ const dbProfile = {
|
||||||
|
|
||||||
// todo: parseLocation
|
// todo: parseLocation
|
||||||
parseLine,
|
parseLine,
|
||||||
parseProducts: modes.parseBitmask,
|
parseProducts: createParseBitmask(modes.bitmasks),
|
||||||
|
|
||||||
formatStation,
|
formatStation,
|
||||||
formatProducts
|
formatProducts
|
||||||
|
|
|
@ -91,23 +91,4 @@ m.bitmasks[128] = m.subway
|
||||||
m.bitmasks[256] = m.tram
|
m.bitmasks[256] = m.tram
|
||||||
m.bitmasks[512] = m.taxi
|
m.bitmasks[512] = m.taxi
|
||||||
|
|
||||||
// todo: move up
|
|
||||||
m.stringifyBitmask = (products) => {
|
|
||||||
let bitmask = 0
|
|
||||||
for (let product in products) {
|
|
||||||
if (products[product] === true) bitmask += m[product].bitmask
|
|
||||||
}
|
|
||||||
return bitmask
|
|
||||||
}
|
|
||||||
|
|
||||||
// todo: move up
|
|
||||||
m.parseBitmask = (bitmask) => {
|
|
||||||
let products = {}, i = 1
|
|
||||||
do {
|
|
||||||
products[m.bitmasks[i].product] = !!(bitmask & i)
|
|
||||||
i *= 2
|
|
||||||
} while (m.bitmasks[i] && m.bitmasks[i].product)
|
|
||||||
return products
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = m
|
module.exports = m
|
||||||
|
|
|
@ -6,9 +6,13 @@ const {to12Digit, to9Digit} = require('vbb-translate-ids')
|
||||||
const _formatStation = require('../../format/station')
|
const _formatStation = require('../../format/station')
|
||||||
const _parseLine = require('../../parse/line')
|
const _parseLine = require('../../parse/line')
|
||||||
const _parseLocation = require('../../parse/location')
|
const _parseLocation = require('../../parse/location')
|
||||||
|
const createParseBitmask = require('../../parse/products-bitmask')
|
||||||
|
const createFormatBitmask = require('../../format/products-bitmask')
|
||||||
|
|
||||||
const modes = require('./modes')
|
const modes = require('./modes')
|
||||||
|
|
||||||
|
const formatBitmask = createFormatBitmask(modes)
|
||||||
|
|
||||||
const transformReqBody = (body) => {
|
const transformReqBody = (body) => {
|
||||||
body.client = {type: 'IPA', id: 'BVG'}
|
body.client = {type: 'IPA', id: 'BVG'}
|
||||||
body.ext = 'VBB.2'
|
body.ext = 'VBB.2'
|
||||||
|
@ -67,7 +71,7 @@ const formatProducts = (products) => {
|
||||||
return {
|
return {
|
||||||
type: 'PROD',
|
type: 'PROD',
|
||||||
mode: 'INC',
|
mode: 'INC',
|
||||||
value: modes.stringifyBitmask(products) + ''
|
value: formatBitmask(products) + ''
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,7 +83,7 @@ const vbbProfile = {
|
||||||
parseStationName: shorten,
|
parseStationName: shorten,
|
||||||
parseLocation,
|
parseLocation,
|
||||||
parseLine,
|
parseLine,
|
||||||
parseProducts: modes.parseBitmask,
|
parseProducts: createParseBitmask(modes.bitmasks),
|
||||||
|
|
||||||
formatStation,
|
formatStation,
|
||||||
formatProducts
|
formatProducts
|
||||||
|
|
|
@ -123,23 +123,4 @@ m.categories = [
|
||||||
// return m.categories[parseInt(category)] || m.unknown
|
// return m.categories[parseInt(category)] || m.unknown
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// todo: move up
|
|
||||||
m.stringifyBitmask = (types) => {
|
|
||||||
let bitmask = 0
|
|
||||||
for (let type in types) {
|
|
||||||
if (types[type] === true) bitmask += m[type].bitmask
|
|
||||||
}
|
|
||||||
return bitmask
|
|
||||||
}
|
|
||||||
|
|
||||||
// todo: move up
|
|
||||||
m.parseBitmask = (bitmask) => {
|
|
||||||
let types = {}, i = 1
|
|
||||||
do {
|
|
||||||
types[m.bitmasks[i].type] = !!(bitmask & i)
|
|
||||||
i *= 2
|
|
||||||
} while (m.bitmasks[i] && m.bitmasks[i].type)
|
|
||||||
return types
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = m
|
module.exports = m
|
||||||
|
|
16
parse/products-bitmask.js
Normal file
16
parse/products-bitmask.js
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
const createParseBitmask = (bitmasks) => {
|
||||||
|
const createBitmask = (bitmask) => {
|
||||||
|
const products = {}
|
||||||
|
let i = 1
|
||||||
|
do {
|
||||||
|
products[bitmasks[i].product] = !!(bitmask & i)
|
||||||
|
i *= 2
|
||||||
|
} while (bitmasks[i] && bitmasks[i].product)
|
||||||
|
return products
|
||||||
|
}
|
||||||
|
return createBitmask
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = createParseBitmask
|
Loading…
Add table
Reference in a new issue