mirror of
https://github.com/public-transport/db-vendo-client.git
synced 2025-02-23 07:09: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 _parseLine = require('../../parse/line')
|
||||
const createParseBitmask = require('../../parse/products-bitmask')
|
||||
const createFormatBitmask = require('../../format/products-bitmask')
|
||||
const {accessibility, bike} = require('../../format/filters')
|
||||
|
||||
const modes = require('./modes')
|
||||
const formatLoyaltyCard = require('./loyalty-cards').format
|
||||
|
||||
const formatBitmask = createFormatBitmask(modes)
|
||||
|
||||
const transformReqBody = (body) => {
|
||||
body.client = {id: 'DB', v: '16040000', type: 'IPH', name: 'DB Navigator'}
|
||||
body.ext = 'DB.R15.12.a'
|
||||
|
@ -87,7 +91,7 @@ const formatProducts = (products) => {
|
|||
return {
|
||||
type: 'PROD',
|
||||
mode: 'INC',
|
||||
value: modes.stringifyBitmask(products) + ''
|
||||
value: formatBitmask(products) + ''
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -102,7 +106,7 @@ const dbProfile = {
|
|||
|
||||
// todo: parseLocation
|
||||
parseLine,
|
||||
parseProducts: modes.parseBitmask,
|
||||
parseProducts: createParseBitmask(modes.bitmasks),
|
||||
|
||||
formatStation,
|
||||
formatProducts
|
||||
|
|
|
@ -91,23 +91,4 @@ m.bitmasks[128] = m.subway
|
|||
m.bitmasks[256] = m.tram
|
||||
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
|
||||
|
|
|
@ -6,9 +6,13 @@ const {to12Digit, to9Digit} = require('vbb-translate-ids')
|
|||
const _formatStation = require('../../format/station')
|
||||
const _parseLine = require('../../parse/line')
|
||||
const _parseLocation = require('../../parse/location')
|
||||
const createParseBitmask = require('../../parse/products-bitmask')
|
||||
const createFormatBitmask = require('../../format/products-bitmask')
|
||||
|
||||
const modes = require('./modes')
|
||||
|
||||
const formatBitmask = createFormatBitmask(modes)
|
||||
|
||||
const transformReqBody = (body) => {
|
||||
body.client = {type: 'IPA', id: 'BVG'}
|
||||
body.ext = 'VBB.2'
|
||||
|
@ -67,7 +71,7 @@ const formatProducts = (products) => {
|
|||
return {
|
||||
type: 'PROD',
|
||||
mode: 'INC',
|
||||
value: modes.stringifyBitmask(products) + ''
|
||||
value: formatBitmask(products) + ''
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -79,7 +83,7 @@ const vbbProfile = {
|
|||
parseStationName: shorten,
|
||||
parseLocation,
|
||||
parseLine,
|
||||
parseProducts: modes.parseBitmask,
|
||||
parseProducts: createParseBitmask(modes.bitmasks),
|
||||
|
||||
formatStation,
|
||||
formatProducts
|
||||
|
|
|
@ -123,23 +123,4 @@ m.categories = [
|
|||
// 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
|
||||
|
|
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