├── native ├── build.rs ├── Cargo.toml ├── src │ └── lib.rs └── Cargo.lock ├── .gitignore ├── Makefile ├── .github └── workflows │ └── node.js.yml ├── package.json ├── LICENSE ├── lib ├── index.ts └── index.test.ts ├── tsconfig.json └── README.md /native/build.rs: -------------------------------------------------------------------------------- 1 | extern crate neon_build; 2 | 3 | fn main() { 4 | neon_build::setup(); // must be called in build.rs 5 | } 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | native/target 2 | native/index.node 3 | native/artifacts.json 4 | **/*~ 5 | **/node_modules 6 | **/.DS_Store 7 | dist/ 8 | public/ 9 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | test-2: 2 | node -e 'require("./")' 3 | 4 | test: 5 | npm test 6 | 7 | install: 8 | npm install 9 | 10 | build: 11 | neon build --release 12 | 13 | clean: 14 | neon clean 15 | 16 | docgen: 17 | npm run docgen 18 | -------------------------------------------------------------------------------- /native/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "neon-brcode" 3 | version = "0.1.0" 4 | authors = ["Julia Naomi "] 5 | license = "MIT" 6 | build = "build.rs" 7 | edition = "2018" 8 | exclude = ["artifacts.json", "index.node"] 9 | 10 | [lib] 11 | name = "neon_brcode" 12 | crate-type = ["cdylib"] 13 | 14 | [build-dependencies] 15 | neon-build = "*" 16 | 17 | [dependencies] 18 | neon = "*" 19 | brcode = "1.4.2" 20 | neon-serde = "*" 21 | -------------------------------------------------------------------------------- /.github/workflows/node.js.yml: -------------------------------------------------------------------------------- 1 | name: Node.js CI 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: [ master ] 8 | 9 | jobs: 10 | build: 11 | 12 | runs-on: ubuntu-latest 13 | 14 | strategy: 15 | matrix: 16 | node-version: [10.x, 12.x, 14.x] 17 | 18 | steps: 19 | - uses: actions/checkout@v2 20 | - name: Use Node.js ${{ matrix.node-version }} 21 | uses: actions/setup-node@v1 22 | with: 23 | node-version: ${{ matrix.node-version }} 24 | - name: build 25 | run: | 26 | npm ci 27 | npx tsc 28 | npm install --global neon-cli 29 | neon build --release 30 | - name: test 31 | run: npm test 32 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "neon-brcode", 3 | "version": "2.0.4", 4 | "description": "Node wrapper for Rust lib BRCODE", 5 | "main": "dist/index.js", 6 | "types": "dist/index.d.ts", 7 | "directories": { 8 | "test": "tests" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/naomijub/neon-brcode" 13 | }, 14 | "bugs": { 15 | "url": "https://github.com/naomijub/neon-brcode/issues" 16 | }, 17 | "keywords": [ 18 | "pix", 19 | "brcode", 20 | "qrcode", 21 | "emv" 22 | ], 23 | "author": "Julia Naomi ", 24 | "license": "MIT", 25 | "dependencies": { 26 | "neon-cli": "^0.5.0" 27 | }, 28 | "scripts": { 29 | "docgen": "typedoc --out public lib/index.ts", 30 | "install": "neon build", 31 | "test": "jest" 32 | }, 33 | "devDependencies": { 34 | "jest": "^26.4.2", 35 | "ts-jest": "^26.4.1", 36 | "typedoc": "^0.20.35", 37 | "typescript": "^4.0.3" 38 | }, 39 | "jest": { 40 | "verbose": true, 41 | "preset": "ts-jest" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Julia Naomi 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /native/src/lib.rs: -------------------------------------------------------------------------------- 1 | use neon::prelude::*; 2 | use brcode::{BrCode, str_to_brcode, crc16_ccitt}; 3 | use neon_serde::export; 4 | 5 | export! { 6 | fn jsonToBrcode(json: BrCode) -> String { 7 | json.to_string() 8 | } 9 | 10 | fn isPix(json: BrCode) -> bool { 11 | json.is_pix() 12 | } 13 | 14 | fn brcodeIsPix(brcode: String) -> bool { 15 | str_to_brcode(&brcode).is_pix() 16 | } 17 | 18 | fn brcodeToJson(brcode: String) -> BrCode { 19 | str_to_brcode(&brcode) 20 | } 21 | 22 | fn crc16Ccitt(code: String) -> String { 23 | crc16_ccitt(&code) 24 | } 25 | 26 | fn getJsonTransactionId(json: BrCode) -> String { 27 | json.get_transaction_id().unwrap_or(String::new()) 28 | } 29 | 30 | fn getBrcodeTransactionId(brcode: String) -> String { 31 | str_to_brcode(&brcode).get_transaction_id().unwrap_or(String::new()) 32 | } 33 | 34 | fn getJsonAliases(json: BrCode) -> Vec { 35 | json.get_alias().unwrap_or(Vec::new()) 36 | } 37 | 38 | fn getBrcodeAliases(brcode: String) -> Vec { 39 | str_to_brcode(&brcode).get_alias().unwrap_or(Vec::new()) 40 | } 41 | 42 | fn getJsonMessages(json: BrCode) -> Vec { 43 | json.get_message().unwrap_or(Vec::new()) 44 | } 45 | 46 | fn getBrcodeMessages(brcode: String) -> Vec { 47 | str_to_brcode(&brcode).get_message().unwrap_or(Vec::new()) 48 | } 49 | 50 | fn jsonToSvgString(json: BrCode) -> String { 51 | json.to_svg_standard_string() 52 | } 53 | 54 | fn brcodeToSvgString(brcode: String) -> String { 55 | str_to_brcode(&brcode).to_svg_standard_string() 56 | } 57 | 58 | fn jsonToSvgFile(json: BrCode, path: String) -> () { 59 | if path.ends_with(".svg") { 60 | json.to_standard_svg_file(&path); 61 | } else { 62 | println!("Path should end with .svg"); 63 | } 64 | } 65 | 66 | fn brcodeToSvgFile(brcode: String, path: String) -> () { 67 | if path.ends_with(".svg") { 68 | str_to_brcode(&brcode).to_standard_svg_file(&path); 69 | } else { 70 | println!("Path should end with .svg"); 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /lib/index.ts: -------------------------------------------------------------------------------- 1 | const brcode = require("../native"); 2 | 3 | export interface BrCodeJson { 4 | payload_version: number; 5 | initiation_method?: number; 6 | merchant_account_information?: string; 7 | merchant_information: Array<{ 8 | id: number; 9 | info: Array<{ 10 | id: number; 11 | info: string; 12 | }>; 13 | }>; 14 | merchant_category_code: number; 15 | merchant_name: string; 16 | merchant_city: string; 17 | postal_code?: string; 18 | convenience?: String; 19 | convenience_fee_fixed?: String; 20 | convenience_fee_percentage?: String; 21 | currency: string; 22 | amount?: number; 23 | country_code: string; 24 | field_template: Array<{ reference_label: string }>; 25 | crc1610: string; 26 | templates?: Array<{ 27 | id: number; 28 | info: Array<{ 29 | id: number; 30 | info: string; 31 | }>; 32 | }>; 33 | } 34 | 35 | export function jsonToBrcode(json: BrCodeJson): string { 36 | return brcode.jsonToBrcode(json); 37 | } 38 | 39 | export function brcodeToJson(code: string): BrCodeJson { 40 | return brcode.brcodeToJson(code); 41 | } 42 | 43 | export function brcodeIsPix(code: String): boolean { 44 | return brcode.brcodeIsPix(code); 45 | } 46 | 47 | export function jsonIsPix(json: BrCodeJson): boolean { 48 | return brcode.isPix(json); 49 | } 50 | 51 | export function crc16Ccitt(message: string): string { 52 | return brcode.crc16Ccitt(message); 53 | } 54 | 55 | export function getJsonTransactionId(json: BrCodeJson): String { 56 | return brcode.getJsonTransactionId(json); 57 | } 58 | 59 | export function getBrcodeTransactionId(code: String): String { 60 | return brcode.getBrcodeTransactionId(code); 61 | } 62 | 63 | export function getJsonAliases(json: BrCodeJson): Array { 64 | return brcode.getJsonAliases(json); 65 | } 66 | 67 | export function getBrcodeAliases(code: String): Array { 68 | return brcode.getBrcodeAliases(code); 69 | } 70 | 71 | export function getJsonMessages(json: BrCodeJson): Array { 72 | return brcode.getJsonMessages(json); 73 | } 74 | 75 | export function getBrcodeMessages(code: String): Array { 76 | return brcode.getBrcodeMessages(code); 77 | } 78 | 79 | export function jsonToSvgString(json: BrCodeJson): String { 80 | return brcode.jsonToSvgString(json) 81 | } 82 | 83 | export function brcodeToSvgString(code: String): String { 84 | return brcode.brcodeToSvgString(code) 85 | } 86 | 87 | export function jsonToSvgFile(json: BrCodeJson, path: String) { 88 | brcode.jsonToSvgFile(json, path); 89 | } 90 | 91 | export function brcodeToSvgFile(code: String, path: String) { 92 | brcode.brcodeToSvgFile(code, path); 93 | } -------------------------------------------------------------------------------- /lib/index.test.ts: -------------------------------------------------------------------------------- 1 | import * as brcode from './index'; 2 | 3 | const code = "00020104141234567890123426580014BR.GOV.BCB.PIX0136123e4567-e12b-12d1-a456-42665544000027300012BR.COM.OUTRO011001234567895204000053039865406123.455802BR5917NOME DO RECEBEDOR6008BRASILIA61087007490062190515RP12345678-201980390012BR.COM.OUTRO01190123.ABCD.3456.WXYZ6304AD38"; 4 | const unchecked_code = "00020104141234567890123426580014BR.GOV.BCB.PIX0136123e4567-e12b-12d1-a456-42665544000027300012BR.COM.OUTRO011001234567895204000053039865406123.455802BR5917NOME DO RECEBEDOR6008BRASILIA61087007490062190515RP12345678-201980390012BR.COM.OUTRO01190123.ABCD.3456.WXYZ6304"; 5 | const json: brcode.BrCodeJson = { 6 | payload_version:1, 7 | merchant_account_information: "12345678901234", 8 | merchant_information:[ 9 | {id:26,info:[ 10 | {id:0,info:"BR.GOV.BCB.PIX"}, 11 | {id:1,info:"123e4567-e12b-12d1-a456-426655440000"} 12 | ]}, 13 | {id:27,info:[ 14 | {id:0,info:"BR.COM.OUTRO"}, 15 | {id:1,info:"0123456789"} 16 | ]} 17 | ], 18 | merchant_category_code:0, 19 | merchant_name:"NOME DO RECEBEDOR", 20 | merchant_city:"BRASILIA", 21 | postal_code:"70074900", 22 | currency:"986", 23 | amount:123.45, 24 | country_code:"BR", 25 | field_template:[{reference_label:"RP12345678-2019"}], 26 | crc1610:"AD38", 27 | templates:[ 28 | {id:80,info:[ 29 | {id:0,info:"BR.COM.OUTRO"}, 30 | {id:1,info:"0123.ABCD.3456.WXYZ"} 31 | ]} 32 | ] 33 | }; 34 | 35 | const notBrcodeJson: brcode.BrCodeJson = { 36 | payload_version:1, 37 | merchant_account_information: "12345678901234", 38 | merchant_information:[ 39 | {id:26,info:[ 40 | {id:0,info:"BR.USA.FR.FIX"}, 41 | {id:1,info:"123e4567-e12b-12d1-a456-426655440000"} 42 | ]}, 43 | {id:27,info:[ 44 | {id:0,info:"BR.COM.OUTRO"}, 45 | {id:1,info:"0123456789"} 46 | ]} 47 | ], 48 | merchant_category_code:0, 49 | merchant_name:"NOME DO RECEBEDOR", 50 | merchant_city:"BRASILIA", 51 | postal_code:"70074900", 52 | currency:"986", 53 | amount:123.45, 54 | country_code:"BR", 55 | field_template:[{reference_label:"RP12345678-2019"}], 56 | crc1610:"AD38", 57 | templates:[ 58 | {id:80,info:[ 59 | {id:0,info:"BR.COM.OUTRO"}, 60 | {id:1,info:"0123.ABCD.3456.WXYZ"} 61 | ]} 62 | ] 63 | }; 64 | 65 | const jsonWithMessage: brcode.BrCodeJson = { 66 | payload_version:1, 67 | merchant_account_information: "12345678901234", 68 | merchant_information:[ 69 | {id:26,info:[ 70 | {id:0,info:"BR.GOV.BCB.PIX"}, 71 | {id:1,info:"123e4567-e12b-12d1-a456-426655440000"}, 72 | {id:2,info:"This is a message"} 73 | ]}, 74 | {id:27,info:[ 75 | {id:0,info:"BR.COM.OUTRO"}, 76 | {id:1,info:"0123456789"} 77 | ]}, 78 | {id:28,info:[ 79 | {id:0,info:"BR.GOV.BCB.PIX"}, 80 | {id:1,info:"555199998877"}, 81 | {id:2,info:"This is another message"} 82 | ]}, 83 | ], 84 | merchant_category_code:0, 85 | merchant_name:"NOME DO RECEBEDOR", 86 | merchant_city:"BRASILIA", 87 | postal_code:"70074900", 88 | currency:"986", 89 | amount:123.45, 90 | country_code:"BR", 91 | field_template:[{reference_label:"RP12345678-2019"}], 92 | crc1610:"AD38", 93 | templates:[ 94 | {id:80,info:[ 95 | {id:0,info:"BR.COM.OUTRO"}, 96 | {id:1,info:"0123.ABCD.3456.WXYZ"} 97 | ]} 98 | ] 99 | }; 100 | 101 | test('Parses and Emit BR Codes', () => { 102 | expect(brcode.brcodeToJson(code)).toEqual(json); 103 | expect(brcode.jsonToBrcode(json)).toEqual(code); 104 | }); 105 | 106 | test('Crc16 CCITT', () => { 107 | expect(brcode.crc16Ccitt("biscuit")).toEqual("B8CE"); 108 | expect(brcode.crc16Ccitt(unchecked_code)).toEqual("AD38"); 109 | }); 110 | 111 | test('Code and json are pix', () => { 112 | expect(brcode.brcodeIsPix(code)).toBeTruthy(); 113 | expect(brcode.jsonIsPix(json)).toBeTruthy(); 114 | expect(brcode.jsonIsPix(notBrcodeJson)).toBeFalsy(); 115 | }); 116 | 117 | test('Get code and json transaction id', () => { 118 | expect(brcode.getBrcodeTransactionId(code)).toEqual("RP12345678-2019"); 119 | expect(brcode.getJsonTransactionId(json)).toEqual("RP12345678-2019"); 120 | }); 121 | 122 | test('Get pix code and json aliases', () => { 123 | expect(brcode.getBrcodeAliases(code)).toEqual(["123e4567-e12b-12d1-a456-426655440000"]); 124 | expect(brcode.getJsonAliases(json)).toEqual(["123e4567-e12b-12d1-a456-426655440000"]); 125 | expect(brcode.getJsonAliases(jsonWithMessage)).toEqual(["123e4567-e12b-12d1-a456-426655440000", "555199998877"]); 126 | }); 127 | 128 | test('Get pix code and json messages', () => { 129 | expect(brcode.getBrcodeMessages(code)).toEqual([]); 130 | expect(brcode.getJsonMessages(jsonWithMessage)).toEqual(["This is a message","This is another message"]); 131 | }); 132 | 133 | test('Can generate svg', () => { 134 | expect(brcode.jsonToSvgString(json)).toContain('; 39 | }>; 40 | merchant_category_code: number; 41 | merchant_name: string; 42 | merchant_city: string; 43 | postal_code?: string; 44 | convenience?: String; 45 | convenience_fee_fixed?: String; 46 | convenience_fee_percentage?: String; 47 | currency: string; 48 | amount?: number; 49 | country_code: string; 50 | field_template: Array<{ reference_label: string }>; 51 | crc1610?: string; 52 | templates?: Array<{ 53 | id: number; 54 | info: Array<{ 55 | id: number; 56 | info: string; 57 | }>; 58 | }>; 59 | } 60 | 61 | function jsonToBrcode(json: BrCodeJson): string 62 | function brcodeToJson(code: string): BrCodeJson 63 | function brcodeIsPix(code: String): boolean 64 | function jsonIsPix(json: BrCodeJson): boolean 65 | function crc16Ccitt(message: string): string 66 | function getJsonTransactionId(json: BrCodeJson): String 67 | function getBrcodeTransactionId(code: String): String 68 | function getJsonAliases(json: BrCodeJson): Array 69 | function getBrcodeAliases(code: String): Array 70 | function getJsonMessages(json: BrCodeJson): Array 71 | function getBrcodeMessages(code: String): Array 72 | function jsonToSvgFile(json: BrCodeJson, path: String) 73 | function brcodeToSvgFile(code: String, path: String) 74 | function jsonToSvgString(json: BrCodeJson): String 75 | function brcodeToSvgString(code: String): String 76 | ``` 77 | 78 | ### Functions descriptions: 79 | * `jsonToBrcode(json: BrCodeJson): string`: converts a `BrCodeJson` into a BR Code String. 80 | * `brcodeToJson(code: string): BrCodeJson`: converts a BR Code String into a `BrCodeJson`. 81 | * `brcodeIsPix(code: String): boolean`: checks if BR Code String is of type Pix. 82 | * `jsonIsPix(json: BrCodeJson): boolean`: checks if `BrCodeJson` is of type Pix. 83 | * `crc16Ccitt(message: string): string`: generates a CRC16_CCITT for the inserted information. 84 | * `getJsonTransactionId(json: BrCodeJson): String`: returns the `transactionId` of a `BrCodeJson`. 85 | * `getBrcodeTransactionId(code: String): String`: returns the `transactionId` of a BR Code String. 86 | * `getJsonAliases(json: BrCodeJson): Array`: returns all Pix aliases of a `BrCodeJson`. 87 | * `getBrcodeAliases(code: String): Array`: returns all Pix aliases of a BR Code String. 88 | * `getJsonMessages(json: BrCodeJson): Array`: returns all Pix messages of a `BrCodeJson`. 89 | * `getBrcodeMessages(code: String): Array`: returns all Pix messages of a BR Code String. 90 | * `jsonToSvgFile(json: BrCodeJson, path: String)`: generates a SVG file at path (must end with `.svg`) for `BrCodeJson`. 91 | * `brcodeToSvgFile(code: String, path: String)`: generates a SVG file at path (must end with `.svg`) for BR Code String. 92 | * `jsonToSvgString(json: BrCodeJson): String`: generates a SVG string for `BrCodeJson`. 93 | * `brcodeToSvgString(code: String): String`: generates a SVG string for BR Code String. 94 | 95 | 96 | ### Example usage 97 | * Test file has more usages. 98 | 99 | **Parse** 100 | ```js 101 | const brcode = require('neon-brcode'); 102 | const code = "00020104141234567890123426580014BR.GOV.BCB.PIX0136123e4567-e12b-12d1-a456-42665544000027300012BR.COM.OUTRO011001234567895204000053039865406123.455802BR5917NOME DO RECEBEDOR6008BRASILIA61087007490062190515RP12345678-201980390012BR.COM.OUTRO01190123.ABCD.3456.WXYZ6304AD38"; 103 | 104 | brcode.brcodeToJson(code) 105 | ``` 106 | 107 | Output: 108 | 109 | ```json 110 | { 111 | "payload_version":1, 112 | "initiation_method":null, 113 | "merchant_information":[ 114 | {"id":26,"info":[ 115 | {"id":0,"info":"BR.GOV.BCB.PIX"}, 116 | {"id":1,"info":"123e4567-e12b-12d1-a456-426655440000"} 117 | ]}, 118 | {"id":27,"info":[ 119 | {"id":0,"info":"BR.COM.OUTRO"}, 120 | {"id":1,"info":"0123456789"} 121 | ]} 122 | ], 123 | "merchant_category_code":0, 124 | "merchant_name":"NOME DO RECEBEDOR", 125 | "merchant_city":"BRASILIA", 126 | "postal_code":"70074900", 127 | "currency":"986", 128 | "amount":123.45, 129 | "country_code":"BR", 130 | "field_template":[{"reference_label":"RP12345678-2019"}], 131 | "crc1610":"AD38", 132 | "templates":[ 133 | {"id":80,"info":[ 134 | {"id":0,"info":"BR.COM.OUTRO"}, 135 | {"id":1,"info":"0123.ABCD.3456.WXYZ"} 136 | ]} 137 | ] 138 | } 139 | ``` 140 | 141 | **Emit** 142 | ```js 143 | const brcode = require('neon-brcode'); 144 | const json = { 145 | "payload_version":1, 146 | "initiation_method":null, 147 | "merchant_information":[ 148 | {"id":26,"info":[ 149 | {"id":0,"info":"BR.GOV.BCB.PIX"}, 150 | {"id":1,"info":"123e4567-e12b-12d1-a456-426655440000"} 151 | ]}, 152 | {"id":27,"info":[ 153 | {"id":0,"info":"BR.COM.OUTRO"}, 154 | {"id":1,"info":"0123456789"} 155 | ]} 156 | ], 157 | "merchant_category_code":0, 158 | "merchant_name":"NOME DO RECEBEDOR", 159 | "merchant_city":"BRASILIA", 160 | "postal_code":"70074900", 161 | "currency":"986", 162 | "amount":123.45, 163 | "country_code":"BR", 164 | "field_template":[{"reference_label":"RP12345678-2019"}], 165 | "crc1610":"AD38", 166 | "templates":[ 167 | {"id":80,"info":[ 168 | {"id":0,"info":"BR.COM.OUTRO"}, 169 | {"id":1,"info":"0123.ABCD.3456.WXYZ"} 170 | ]} 171 | ] 172 | }; 173 | 174 | brcode.jsonToBrcode(json) 175 | ``` 176 | 177 | Output: 178 | 179 | ```json 180 | "00020104141234567890123426580014BR.GOV.BCB.PIX0136123e4567-e12b-12d1-a456-42665544000027300012BR.COM.OUTRO011001234567895204000053039865406123.455802BR5917NOME DO RECEBEDOR6008BRASILIA61087007490062190515RP12345678-201980390012BR.COM.OUTRO01190123.ABCD.3456.WXYZ6304AD38" 181 | ``` 182 | 183 | **crc16Ccitt** 184 | ```js 185 | const brcode = require('neon-brcode'); 186 | const unchecked_code = "00020104141234567890123426580014BR.GOV.BCB.PIX0136123e4567-e12b-12d1-a456-42665544000027300012BR.COM.OUTRO011001234567895204000053039865406123.455802BR5917NOME DO RECEBEDOR6008BRASILIA61087007490062190515RP12345678-201980390012BR.COM.OUTRO01190123.ABCD.3456.WXYZ6304"; 187 | 188 | brcode.crc16Ccitt(unchecked_code) 189 | // "AD38" 190 | ``` 191 | -------------------------------------------------------------------------------- /native/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | [[package]] 4 | name = "addr2line" 5 | version = "0.13.0" 6 | source = "registry+https://github.com/rust-lang/crates.io-index" 7 | checksum = "1b6a2d3371669ab3ca9797670853d61402b03d0b4b9ebf33d677dfa720203072" 8 | dependencies = [ 9 | "gimli", 10 | ] 11 | 12 | [[package]] 13 | name = "adler" 14 | version = "0.2.3" 15 | source = "registry+https://github.com/rust-lang/crates.io-index" 16 | checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" 17 | 18 | [[package]] 19 | name = "adler32" 20 | version = "1.2.0" 21 | source = "registry+https://github.com/rust-lang/crates.io-index" 22 | checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" 23 | 24 | [[package]] 25 | name = "aho-corasick" 26 | version = "0.7.14" 27 | source = "registry+https://github.com/rust-lang/crates.io-index" 28 | checksum = "b476ce7103678b0c6d3d395dbbae31d48ff910bd28be979ba5d48c6351131d0d" 29 | dependencies = [ 30 | "memchr", 31 | ] 32 | 33 | [[package]] 34 | name = "autocfg" 35 | version = "1.0.1" 36 | source = "registry+https://github.com/rust-lang/crates.io-index" 37 | checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" 38 | 39 | [[package]] 40 | name = "backtrace" 41 | version = "0.3.53" 42 | source = "registry+https://github.com/rust-lang/crates.io-index" 43 | checksum = "707b586e0e2f247cbde68cdd2c3ce69ea7b7be43e1c5b426e37c9319c4b9838e" 44 | dependencies = [ 45 | "addr2line", 46 | "cfg-if 1.0.0", 47 | "libc", 48 | "miniz_oxide 0.4.3", 49 | "object", 50 | "rustc-demangle", 51 | ] 52 | 53 | [[package]] 54 | name = "bitflags" 55 | version = "1.2.1" 56 | source = "registry+https://github.com/rust-lang/crates.io-index" 57 | checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" 58 | 59 | [[package]] 60 | name = "brcode" 61 | version = "1.4.2" 62 | source = "registry+https://github.com/rust-lang/crates.io-index" 63 | checksum = "88558b05f3ba87d682f835921cfdb8b6a0487fab44c173b77efd5bd6f802fe00" 64 | dependencies = [ 65 | "edn-derive", 66 | "edn-rs 0.15.1", 67 | "qrcode-generator", 68 | "serde", 69 | "serde_derive", 70 | "serde_json", 71 | ] 72 | 73 | [[package]] 74 | name = "bytemuck" 75 | version = "1.4.1" 76 | source = "registry+https://github.com/rust-lang/crates.io-index" 77 | checksum = "41aa2ec95ca3b5c54cf73c91acf06d24f4495d5f1b1c12506ae3483d646177ac" 78 | 79 | [[package]] 80 | name = "byteorder" 81 | version = "1.3.4" 82 | source = "registry+https://github.com/rust-lang/crates.io-index" 83 | checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" 84 | 85 | [[package]] 86 | name = "cc" 87 | version = "1.0.61" 88 | source = "registry+https://github.com/rust-lang/crates.io-index" 89 | checksum = "ed67cbde08356238e75fc4656be4749481eeffb09e19f320a25237d5221c985d" 90 | 91 | [[package]] 92 | name = "cfg-if" 93 | version = "0.1.10" 94 | source = "registry+https://github.com/rust-lang/crates.io-index" 95 | checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" 96 | 97 | [[package]] 98 | name = "cfg-if" 99 | version = "1.0.0" 100 | source = "registry+https://github.com/rust-lang/crates.io-index" 101 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 102 | 103 | [[package]] 104 | name = "color_quant" 105 | version = "1.1.0" 106 | source = "registry+https://github.com/rust-lang/crates.io-index" 107 | checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" 108 | 109 | [[package]] 110 | name = "crc32fast" 111 | version = "1.2.0" 112 | source = "registry+https://github.com/rust-lang/crates.io-index" 113 | checksum = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" 114 | dependencies = [ 115 | "cfg-if 0.1.10", 116 | ] 117 | 118 | [[package]] 119 | name = "crossbeam-channel" 120 | version = "0.4.4" 121 | source = "registry+https://github.com/rust-lang/crates.io-index" 122 | checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87" 123 | dependencies = [ 124 | "crossbeam-utils", 125 | "maybe-uninit", 126 | ] 127 | 128 | [[package]] 129 | name = "crossbeam-deque" 130 | version = "0.7.3" 131 | source = "registry+https://github.com/rust-lang/crates.io-index" 132 | checksum = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" 133 | dependencies = [ 134 | "crossbeam-epoch", 135 | "crossbeam-utils", 136 | "maybe-uninit", 137 | ] 138 | 139 | [[package]] 140 | name = "crossbeam-epoch" 141 | version = "0.8.2" 142 | source = "registry+https://github.com/rust-lang/crates.io-index" 143 | checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" 144 | dependencies = [ 145 | "autocfg", 146 | "cfg-if 0.1.10", 147 | "crossbeam-utils", 148 | "lazy_static", 149 | "maybe-uninit", 150 | "memoffset", 151 | "scopeguard", 152 | ] 153 | 154 | [[package]] 155 | name = "crossbeam-utils" 156 | version = "0.7.2" 157 | source = "registry+https://github.com/rust-lang/crates.io-index" 158 | checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" 159 | dependencies = [ 160 | "autocfg", 161 | "cfg-if 0.1.10", 162 | "lazy_static", 163 | ] 164 | 165 | [[package]] 166 | name = "cslice" 167 | version = "0.2.0" 168 | source = "registry+https://github.com/rust-lang/crates.io-index" 169 | checksum = "697c714f50560202b1f4e2e09cd50a421881c83e9025db75d15f276616f04f40" 170 | 171 | [[package]] 172 | name = "deflate" 173 | version = "0.8.6" 174 | source = "registry+https://github.com/rust-lang/crates.io-index" 175 | checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174" 176 | dependencies = [ 177 | "adler32", 178 | "byteorder", 179 | ] 180 | 181 | [[package]] 182 | name = "edn-derive" 183 | version = "0.4.3" 184 | source = "registry+https://github.com/rust-lang/crates.io-index" 185 | checksum = "301264cd900b426004dd42f0854d49c409f1a18601f3b2e75de34e4df96f7e69" 186 | dependencies = [ 187 | "edn-rs 0.16.7", 188 | "proc-macro2", 189 | "quote", 190 | "syn", 191 | ] 192 | 193 | [[package]] 194 | name = "edn-rs" 195 | version = "0.15.1" 196 | source = "registry+https://github.com/rust-lang/crates.io-index" 197 | checksum = "f6e32e10b77021129907913be3c8cc63373133508bc1af7bf59cf9ea20e4e223" 198 | 199 | [[package]] 200 | name = "edn-rs" 201 | version = "0.16.7" 202 | source = "registry+https://github.com/rust-lang/crates.io-index" 203 | checksum = "900500f66e93fafc1559bcbc0a63db98ebb3ecd80a3f095996fbb64d2debe3ec" 204 | 205 | [[package]] 206 | name = "either" 207 | version = "1.6.1" 208 | source = "registry+https://github.com/rust-lang/crates.io-index" 209 | checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" 210 | 211 | [[package]] 212 | name = "error-chain" 213 | version = "0.12.4" 214 | source = "registry+https://github.com/rust-lang/crates.io-index" 215 | checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" 216 | dependencies = [ 217 | "backtrace", 218 | "version_check", 219 | ] 220 | 221 | [[package]] 222 | name = "gif" 223 | version = "0.11.1" 224 | source = "registry+https://github.com/rust-lang/crates.io-index" 225 | checksum = "02efba560f227847cb41463a7395c514d127d4f74fff12ef0137fff1b84b96c4" 226 | dependencies = [ 227 | "color_quant", 228 | "weezl", 229 | ] 230 | 231 | [[package]] 232 | name = "gimli" 233 | version = "0.22.0" 234 | source = "registry+https://github.com/rust-lang/crates.io-index" 235 | checksum = "aaf91faf136cb47367fa430cd46e37a788775e7fa104f8b4bcb3861dc389b724" 236 | 237 | [[package]] 238 | name = "hermit-abi" 239 | version = "0.1.17" 240 | source = "registry+https://github.com/rust-lang/crates.io-index" 241 | checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" 242 | dependencies = [ 243 | "libc", 244 | ] 245 | 246 | [[package]] 247 | name = "html-escape" 248 | version = "0.2.6" 249 | source = "registry+https://github.com/rust-lang/crates.io-index" 250 | checksum = "d348900ce941b7474395ba922ed3735a517df4546a2939ddb416ce85eeaa988e" 251 | dependencies = [ 252 | "utf8-width", 253 | ] 254 | 255 | [[package]] 256 | name = "image" 257 | version = "0.23.10" 258 | source = "registry+https://github.com/rust-lang/crates.io-index" 259 | checksum = "985fc06b1304d19c28d5c562ed78ef5316183f2b0053b46763a0b94862373c34" 260 | dependencies = [ 261 | "bytemuck", 262 | "byteorder", 263 | "gif", 264 | "jpeg-decoder", 265 | "num-iter", 266 | "num-rational 0.3.0", 267 | "num-traits", 268 | "png", 269 | "scoped_threadpool", 270 | "tiff", 271 | ] 272 | 273 | [[package]] 274 | name = "itoa" 275 | version = "0.4.6" 276 | source = "registry+https://github.com/rust-lang/crates.io-index" 277 | checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" 278 | 279 | [[package]] 280 | name = "jpeg-decoder" 281 | version = "0.1.20" 282 | source = "registry+https://github.com/rust-lang/crates.io-index" 283 | checksum = "cc797adac5f083b8ff0ca6f6294a999393d76e197c36488e2ef732c4715f6fa3" 284 | dependencies = [ 285 | "byteorder", 286 | "rayon", 287 | ] 288 | 289 | [[package]] 290 | name = "lazy_static" 291 | version = "1.4.0" 292 | source = "registry+https://github.com/rust-lang/crates.io-index" 293 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 294 | 295 | [[package]] 296 | name = "libc" 297 | version = "0.2.79" 298 | source = "registry+https://github.com/rust-lang/crates.io-index" 299 | checksum = "2448f6066e80e3bfc792e9c98bf705b4b0fc6e8ef5b43e5889aff0eaa9c58743" 300 | 301 | [[package]] 302 | name = "lzw" 303 | version = "0.10.0" 304 | source = "registry+https://github.com/rust-lang/crates.io-index" 305 | checksum = "7d947cbb889ed21c2a84be6ffbaebf5b4e0f4340638cba0444907e38b56be084" 306 | 307 | [[package]] 308 | name = "maybe-uninit" 309 | version = "2.0.0" 310 | source = "registry+https://github.com/rust-lang/crates.io-index" 311 | checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" 312 | 313 | [[package]] 314 | name = "memchr" 315 | version = "2.3.3" 316 | source = "registry+https://github.com/rust-lang/crates.io-index" 317 | checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" 318 | 319 | [[package]] 320 | name = "memoffset" 321 | version = "0.5.6" 322 | source = "registry+https://github.com/rust-lang/crates.io-index" 323 | checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa" 324 | dependencies = [ 325 | "autocfg", 326 | ] 327 | 328 | [[package]] 329 | name = "miniz_oxide" 330 | version = "0.3.7" 331 | source = "registry+https://github.com/rust-lang/crates.io-index" 332 | checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435" 333 | dependencies = [ 334 | "adler32", 335 | ] 336 | 337 | [[package]] 338 | name = "miniz_oxide" 339 | version = "0.4.3" 340 | source = "registry+https://github.com/rust-lang/crates.io-index" 341 | checksum = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d" 342 | dependencies = [ 343 | "adler", 344 | "autocfg", 345 | ] 346 | 347 | [[package]] 348 | name = "neon" 349 | version = "0.4.0" 350 | source = "registry+https://github.com/rust-lang/crates.io-index" 351 | checksum = "6cac4691701b686e6c07b2eb5b51a9f26f5c11179c5d7924b78100dd387fc99d" 352 | dependencies = [ 353 | "cslice", 354 | "neon-build 0.4.0", 355 | "neon-runtime", 356 | "semver", 357 | ] 358 | 359 | [[package]] 360 | name = "neon-brcode" 361 | version = "0.1.0" 362 | dependencies = [ 363 | "brcode", 364 | "neon", 365 | "neon-build 0.5.0", 366 | "neon-serde", 367 | ] 368 | 369 | [[package]] 370 | name = "neon-build" 371 | version = "0.4.0" 372 | source = "registry+https://github.com/rust-lang/crates.io-index" 373 | checksum = "f9ed332afd4711b84f4f83d334428a1fd9ce53620b62b87595934297c5ede2ed" 374 | dependencies = [ 375 | "cfg-if 0.1.10", 376 | "neon-sys", 377 | ] 378 | 379 | [[package]] 380 | name = "neon-build" 381 | version = "0.5.0" 382 | source = "registry+https://github.com/rust-lang/crates.io-index" 383 | checksum = "39a7bb825db76fd7b73956ea39329b92bc599adc8b71e1675908d9062c6dae69" 384 | dependencies = [ 385 | "cfg-if 0.1.10", 386 | ] 387 | 388 | [[package]] 389 | name = "neon-runtime" 390 | version = "0.4.0" 391 | source = "registry+https://github.com/rust-lang/crates.io-index" 392 | checksum = "2beea093a60c08463f65e1da4cda68149986f60d8d2177489b44589463c782a6" 393 | dependencies = [ 394 | "cfg-if 0.1.10", 395 | "neon-sys", 396 | ] 397 | 398 | [[package]] 399 | name = "neon-serde" 400 | version = "0.4.0" 401 | source = "registry+https://github.com/rust-lang/crates.io-index" 402 | checksum = "5f134307714cdd478581fd3cc990202ead78744d676d8437bdff64260395eb8e" 403 | dependencies = [ 404 | "error-chain", 405 | "neon", 406 | "neon-runtime", 407 | "num", 408 | "serde", 409 | ] 410 | 411 | [[package]] 412 | name = "neon-sys" 413 | version = "0.4.0" 414 | source = "registry+https://github.com/rust-lang/crates.io-index" 415 | checksum = "69a6c1ba6b926746f4d3f596de18ce49d062d78fd9f35f636080232aa77a0e16" 416 | dependencies = [ 417 | "cc", 418 | "regex", 419 | ] 420 | 421 | [[package]] 422 | name = "num" 423 | version = "0.2.1" 424 | source = "registry+https://github.com/rust-lang/crates.io-index" 425 | checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36" 426 | dependencies = [ 427 | "num-complex", 428 | "num-integer", 429 | "num-iter", 430 | "num-rational 0.2.4", 431 | "num-traits", 432 | ] 433 | 434 | [[package]] 435 | name = "num-complex" 436 | version = "0.2.4" 437 | source = "registry+https://github.com/rust-lang/crates.io-index" 438 | checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" 439 | dependencies = [ 440 | "autocfg", 441 | "num-traits", 442 | ] 443 | 444 | [[package]] 445 | name = "num-integer" 446 | version = "0.1.43" 447 | source = "registry+https://github.com/rust-lang/crates.io-index" 448 | checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b" 449 | dependencies = [ 450 | "autocfg", 451 | "num-traits", 452 | ] 453 | 454 | [[package]] 455 | name = "num-iter" 456 | version = "0.1.41" 457 | source = "registry+https://github.com/rust-lang/crates.io-index" 458 | checksum = "7a6e6b7c748f995c4c29c5f5ae0248536e04a5739927c74ec0fa564805094b9f" 459 | dependencies = [ 460 | "autocfg", 461 | "num-integer", 462 | "num-traits", 463 | ] 464 | 465 | [[package]] 466 | name = "num-rational" 467 | version = "0.2.4" 468 | source = "registry+https://github.com/rust-lang/crates.io-index" 469 | checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" 470 | dependencies = [ 471 | "autocfg", 472 | "num-integer", 473 | "num-traits", 474 | ] 475 | 476 | [[package]] 477 | name = "num-rational" 478 | version = "0.3.0" 479 | source = "registry+https://github.com/rust-lang/crates.io-index" 480 | checksum = "a5b4d7360f362cfb50dde8143501e6940b22f644be75a4cc90b2d81968908138" 481 | dependencies = [ 482 | "autocfg", 483 | "num-integer", 484 | "num-traits", 485 | ] 486 | 487 | [[package]] 488 | name = "num-traits" 489 | version = "0.2.12" 490 | source = "registry+https://github.com/rust-lang/crates.io-index" 491 | checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611" 492 | dependencies = [ 493 | "autocfg", 494 | ] 495 | 496 | [[package]] 497 | name = "num_cpus" 498 | version = "1.13.0" 499 | source = "registry+https://github.com/rust-lang/crates.io-index" 500 | checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" 501 | dependencies = [ 502 | "hermit-abi", 503 | "libc", 504 | ] 505 | 506 | [[package]] 507 | name = "object" 508 | version = "0.21.1" 509 | source = "registry+https://github.com/rust-lang/crates.io-index" 510 | checksum = "37fd5004feb2ce328a52b0b3d01dbf4ffff72583493900ed15f22d4111c51693" 511 | 512 | [[package]] 513 | name = "png" 514 | version = "0.16.7" 515 | source = "registry+https://github.com/rust-lang/crates.io-index" 516 | checksum = "dfe7f9f1c730833200b134370e1d5098964231af8450bce9b78ee3ab5278b970" 517 | dependencies = [ 518 | "bitflags", 519 | "crc32fast", 520 | "deflate", 521 | "miniz_oxide 0.3.7", 522 | ] 523 | 524 | [[package]] 525 | name = "proc-macro2" 526 | version = "1.0.24" 527 | source = "registry+https://github.com/rust-lang/crates.io-index" 528 | checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" 529 | dependencies = [ 530 | "unicode-xid", 531 | ] 532 | 533 | [[package]] 534 | name = "qrcode-generator" 535 | version = "4.0.3" 536 | source = "registry+https://github.com/rust-lang/crates.io-index" 537 | checksum = "204df4537a704cabce9ba8384c0c1010345705c9020bf51765e7ce316f5334e4" 538 | dependencies = [ 539 | "html-escape", 540 | "image", 541 | "qrcodegen", 542 | ] 543 | 544 | [[package]] 545 | name = "qrcodegen" 546 | version = "1.6.0" 547 | source = "registry+https://github.com/rust-lang/crates.io-index" 548 | checksum = "d24ea38b2345f15533e6668104bec0136883404287e095f15f9ea2522e2b4b6c" 549 | 550 | [[package]] 551 | name = "quote" 552 | version = "1.0.7" 553 | source = "registry+https://github.com/rust-lang/crates.io-index" 554 | checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" 555 | dependencies = [ 556 | "proc-macro2", 557 | ] 558 | 559 | [[package]] 560 | name = "rayon" 561 | version = "1.4.1" 562 | source = "registry+https://github.com/rust-lang/crates.io-index" 563 | checksum = "dcf6960dc9a5b4ee8d3e4c5787b4a112a8818e0290a42ff664ad60692fdf2032" 564 | dependencies = [ 565 | "autocfg", 566 | "crossbeam-deque", 567 | "either", 568 | "rayon-core", 569 | ] 570 | 571 | [[package]] 572 | name = "rayon-core" 573 | version = "1.8.1" 574 | source = "registry+https://github.com/rust-lang/crates.io-index" 575 | checksum = "e8c4fec834fb6e6d2dd5eece3c7b432a52f0ba887cf40e595190c4107edc08bf" 576 | dependencies = [ 577 | "crossbeam-channel", 578 | "crossbeam-deque", 579 | "crossbeam-utils", 580 | "lazy_static", 581 | "num_cpus", 582 | ] 583 | 584 | [[package]] 585 | name = "regex" 586 | version = "1.4.1" 587 | source = "registry+https://github.com/rust-lang/crates.io-index" 588 | checksum = "8963b85b8ce3074fecffde43b4b0dded83ce2f367dc8d363afc56679f3ee820b" 589 | dependencies = [ 590 | "aho-corasick", 591 | "memchr", 592 | "regex-syntax", 593 | "thread_local", 594 | ] 595 | 596 | [[package]] 597 | name = "regex-syntax" 598 | version = "0.6.20" 599 | source = "registry+https://github.com/rust-lang/crates.io-index" 600 | checksum = "8cab7a364d15cde1e505267766a2d3c4e22a843e1a601f0fa7564c0f82ced11c" 601 | 602 | [[package]] 603 | name = "rustc-demangle" 604 | version = "0.1.17" 605 | source = "registry+https://github.com/rust-lang/crates.io-index" 606 | checksum = "b2610b7f643d18c87dff3b489950269617e6601a51f1f05aa5daefee36f64f0b" 607 | 608 | [[package]] 609 | name = "ryu" 610 | version = "1.0.5" 611 | source = "registry+https://github.com/rust-lang/crates.io-index" 612 | checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" 613 | 614 | [[package]] 615 | name = "scoped_threadpool" 616 | version = "0.1.9" 617 | source = "registry+https://github.com/rust-lang/crates.io-index" 618 | checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" 619 | 620 | [[package]] 621 | name = "scopeguard" 622 | version = "1.1.0" 623 | source = "registry+https://github.com/rust-lang/crates.io-index" 624 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 625 | 626 | [[package]] 627 | name = "semver" 628 | version = "0.9.0" 629 | source = "registry+https://github.com/rust-lang/crates.io-index" 630 | checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 631 | dependencies = [ 632 | "semver-parser", 633 | ] 634 | 635 | [[package]] 636 | name = "semver-parser" 637 | version = "0.7.0" 638 | source = "registry+https://github.com/rust-lang/crates.io-index" 639 | checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" 640 | 641 | [[package]] 642 | name = "serde" 643 | version = "1.0.116" 644 | source = "registry+https://github.com/rust-lang/crates.io-index" 645 | checksum = "96fe57af81d28386a513cbc6858332abc6117cfdb5999647c6444b8f43a370a5" 646 | dependencies = [ 647 | "serde_derive", 648 | ] 649 | 650 | [[package]] 651 | name = "serde_derive" 652 | version = "1.0.116" 653 | source = "registry+https://github.com/rust-lang/crates.io-index" 654 | checksum = "f630a6370fd8e457873b4bd2ffdae75408bc291ba72be773772a4c2a065d9ae8" 655 | dependencies = [ 656 | "proc-macro2", 657 | "quote", 658 | "syn", 659 | ] 660 | 661 | [[package]] 662 | name = "serde_json" 663 | version = "1.0.59" 664 | source = "registry+https://github.com/rust-lang/crates.io-index" 665 | checksum = "dcac07dbffa1c65e7f816ab9eba78eb142c6d44410f4eeba1e26e4f5dfa56b95" 666 | dependencies = [ 667 | "itoa", 668 | "ryu", 669 | "serde", 670 | ] 671 | 672 | [[package]] 673 | name = "syn" 674 | version = "1.0.44" 675 | source = "registry+https://github.com/rust-lang/crates.io-index" 676 | checksum = "e03e57e4fcbfe7749842d53e24ccb9aa12b7252dbe5e91d2acad31834c8b8fdd" 677 | dependencies = [ 678 | "proc-macro2", 679 | "quote", 680 | "unicode-xid", 681 | ] 682 | 683 | [[package]] 684 | name = "thread_local" 685 | version = "1.0.1" 686 | source = "registry+https://github.com/rust-lang/crates.io-index" 687 | checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" 688 | dependencies = [ 689 | "lazy_static", 690 | ] 691 | 692 | [[package]] 693 | name = "tiff" 694 | version = "0.5.0" 695 | source = "registry+https://github.com/rust-lang/crates.io-index" 696 | checksum = "3f3b8a87c4da944c3f27e5943289171ac71a6150a79ff6bacfff06d159dfff2f" 697 | dependencies = [ 698 | "byteorder", 699 | "lzw", 700 | "miniz_oxide 0.3.7", 701 | ] 702 | 703 | [[package]] 704 | name = "unicode-xid" 705 | version = "0.2.1" 706 | source = "registry+https://github.com/rust-lang/crates.io-index" 707 | checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" 708 | 709 | [[package]] 710 | name = "utf8-width" 711 | version = "0.1.4" 712 | source = "registry+https://github.com/rust-lang/crates.io-index" 713 | checksum = "9071ac216321a4470a69fb2b28cfc68dcd1a39acd877c8be8e014df6772d8efa" 714 | 715 | [[package]] 716 | name = "version_check" 717 | version = "0.9.2" 718 | source = "registry+https://github.com/rust-lang/crates.io-index" 719 | checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" 720 | 721 | [[package]] 722 | name = "weezl" 723 | version = "0.1.1" 724 | source = "registry+https://github.com/rust-lang/crates.io-index" 725 | checksum = "e0e26e7a4d998e3d7949c69444b8b4916bac810da0d3a82ae612c89e952782f4" 726 | --------------------------------------------------------------------------------