Dart wrapper of brcode
to parse and emit PIX BR Code.
- Include
dartbrcode
inpubspec.yaml
dependencies:
dartbrcode: ^0.3.0
- Copy
libbrcode.*
from brcode to your Dart/Flutter project root:
- for Linux/Android copy
libbrcode.so
. - for macOS/iOS copy
libbrcode.dylib
. cargo build --release
project from git and copy thelibbrcode.*
fromtarget/release/libbrcode.*
to your Dart project root. Mobile in the sectionBuilding for mobile
.- Shellscript to get files from release: So
curl -s https://api.github.com/repos/naomijub/brcode/releases/latest \
| grep "browser_download_url.*so" \
| cut -d : -f 2,3 \
| tr -d \" \
| wget -qi -
dylib
curl -s https://api.github.com/repos/naomijub/brcode/releases/latest \
| grep "browser_download_url.*dylib" \
| cut -d : -f 2,3 \
| tr -d \" \
| wget -qi -
- Use it!
Parse
import 'package:dartbrcode/dartbrcode.dart';
final json = '{"payload_version":1,"initiation_method":null,"merchant_account_information":"12345678901234","merchant_information":[{"id":26,"info":[{"id":0,"info":"BR.GOV.BCB.PIX"},{"id":1,"info":"123e4567-e12b-12d1-a456-426655440000"}]},{"id":27,"info":[{"id":0,"info":"BR.COM.OUTRO"},{"id":1,"info":"0123456789"}]}],"merchant_category_code":0,"merchant_name":"NOME DO RECEBEDOR","merchant_city":"BRASILIA","postal_code":"70074900","currency":"986","amount":123.45,"country_code":"BR","field_template":[{"reference_label":"RP12345678-2019"}],"crc1610":"AD38","templates":[{"id":80,"info":[{"id":0,"info":"BR.COM.OUTRO"},{"id":1,"info":"0123.ABCD.3456.WXYZ"}]}]}';
void main() {
jsonToBrcode(json);
// '00020104141234567890123426580014BR.GOV.BCB.PIX0136123e4567-e12b-12d1-a456-42665544000027300012BR.COM.OUTRO011001234567895204000053039865406123.455802BR5917NOME DO RECEBEDOR6008BRASILIA61087007490062190515RP12345678-201980390012BR.COM.OUTRO01190123.ABCD.3456.WXYZ6304AD38'
}
Emit
import 'package:dartbrcode/dartbrcode.dart';
final brcode = '00020104141234567890123426580014BR.GOV.BCB.PIX0136123e4567-e12b-12d1-a456-42665544000027300012BR.COM.OUTRO011001234567895204000053039865406123.455802BR5917NOME DO RECEBEDOR6008BRASILIA61087007490062190515RP12345678-201980390012BR.COM.OUTRO01190123.ABCD.3456.WXYZ6304AD38';
void main() {
jsonFromBrcode(brcode);
// '{"payload_version":1,"initiation_method":null,"merchant_account_information":"12345678901234","merchant_information":[{"id":26,"info":[{"id":0,"info":"BR.GOV.BCB.PIX"},{"id":1,"info":"123e4567-e12b-12d1-a456-426655440000"}]},{"id":27,"info":[{"id":0,"info":"BR.COM.OUTRO"},{"id":1,"info":"0123456789"}]}],"merchant_category_code":0,"merchant_name":"NOME DO RECEBEDOR","merchant_city":"BRASILIA","postal_code":"70074900","currency":"986","amount":123.45,"country_code":"BR","field_template":[{"reference_label":"RP12345678-2019"}],"crc1610":"AD38","templates":[{"id":80,"info":[{"id":0,"info":"BR.COM.OUTRO"},{"id":1,"info":"0123.ABCD.3456.WXYZ"}]}]}'
}
Crc16Ccitt
import 'package:dartbrcode/dartbrcode.dart';
final uncheckedBrcode = '00020104141234567890123426580014BR.GOV.BCB.PIX0136123e4567-e12b-12d1-a456-42665544000027300012BR.COM.OUTRO011001234567895204000053039865406123.455802BR5917NOME DO RECEBEDOR6008BRASILIA61087007490062190515RP12345678-201980390012BR.COM.OUTRO01190123.ABCD.3456.WXYZ6304';
void main() {
crc16Ccitt(uncheckedBrcode);
// 'AD38'
}
- Install Android NDK
- Add Rust target for android
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android
- Build cargo for every target
# $ANDROID_NDK_HOME is already set and pointing to the Android NDK folder
# ENV
AARCH64_LINKER=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android26-clang
ARMV7_LINKER=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi26-clang
I686_LINKER=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android26-clang
# Build
CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER=$AARCH64_LINKER cargo build - target aarch64-linux-android - release
CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER=$ARMV7_LINKER cargo build - target armv7-linux-androideabi - release
CARGO_TARGET_I686_LINUX_ANDROID_LINKER=$I686_LINKER cargo build - target i686-linux-android - release
- Files will be found at:
target/aarch64-linux-android/release/libbrcode.so
target/armv7-linux-androideabi/release/libbrcode.so
target/i686-linux-android/release/libbrcode.so
- Instal xcode
- Add Rust targets for iOS
rustup target add aarch64-apple-ios armv7-apple-ios armv7s-apple-ios x86_64-apple-ios i386-apple-ios
- Install
cargo-lipo
cargo install cargo-lipo
. - Install
cbindgen
cargo install cbindgen
. - Build targets for iOS with
cargo lipo --release
. - Create a
cbindgen.toml
:
language = "C"
autogen_warning = "// NOTE: Append the lines below to ios/Classes/Brcode.h"
#namespace = "ffi"
#include_guard = "CBINDGEN_BINDINGS_H"
[defines]
"target_os = ios" = "TARGET_OS_IOS"
"target_os = macos" = "TARGET_OS_MACOS"
- Create C bindigns via:
cbindgen ./src/lib.rs -c cbindgen.toml | grep -v \#include | uniq
jsonToBrcode
For 100 runs: peak: 371 us, bottom: 048 us, avg: ~083 us
brcodeToJson
For 100 runs: peak: 327 us, bottom: 069 us, avg: ~101 us
jsonToBrcode
For 10 runs: 207.51774227018055 us.
brcodeToJson
For 10 runs: 378.68780764861793 us.
- parse,
brcodeToJson
- emit,
jsonToBrcode
- parse returning
Map<String, dynamic>
- emit receiving
Map<String, dynamic>
as args