Rust crate to implement a counterpart to the PBRT book's (3rd edition) C++ code.

Overview

rs_pbrt

crates.io Build Status Documentation Status dependency status builds.sr.ht status

You can find more information about rs_pbrt at https://www.rs-pbrt.org/about ...

Rust crate to implement a counterpart to the PBRT book's (3rd edition) C++ code:

http://www.pbrt.org

Current Rust (development) documentation:

https://www.janwalter.org/doc/rust/rs_pbrt/index.html or https://www.rs-pbrt.org/doc/crates/rs_pbrt/index.html

Usage

> cargo build --release --no-default-features
> ./target/release/rs_pbrt --help
rs_pbrt 0.9.3
Parse a PBRT scene file (extension .pbrt) and render it

USAGE:
    rs_pbrt [OPTIONS] <path>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

OPTIONS:
        --cropx0 <cropx0>            Specify an image crop window <x0 x1 y0 y1> [default: 0.0]
        --cropx1 <cropx1>            Specify an image crop window <x0 x1 y0 y1> [default: 1.0]
        --cropy0 <cropy0>            Specify an image crop window <x0 x1 y0 y1> [default: 0.0]
        --cropy1 <cropy1>            Specify an image crop window <x0 x1 y0 y1> [default: 1.0]
    -i, --integrator <integrator>    ao, directlighting, whitted, path, bdpt, mlt, sppm, volpath
    -t, --nthreads <nthreads>        use specified number of threads for rendering [default: 0]
    -s, --samples <samples>          pixel samples [default: 0]

ARGS:
    <path>    The path to the file to read

Test Scenes

Some images of the test scenes are shown below, but you can find more test scenes on GitLab.

Ganesha Statue

Very detailed scan of a small statue with over 4.3 million triangles, illuminated by a few area light sources.

Ganesha Statue

The scene can be found within the repository (assets/scenes/ganesha.tar.gz).

Subsurface Scattering (SSS)

SSS Dragon

sss_dragon_pbrt.tar.gz

Stochastic Progressive Photon Mapping (SPPM)

SPPM Caustic Glass

caustic_glass.tar.gz

Ecosystem (Cover image for the first edition of the PBRT book)

Ecosystem

pbrt_ecosys.tar.gz

Landscape (Cover image for the third edition of the PBRT book)

Landscape

Hair

The hair scattering model in action:

Curly and straight hair rendered by Rust version of PBRT

Japanes Classroom by NovaZeeke

Classroom room rendered by rs_pbrt

classroom_pbrt.tar.gz

The White Room by Jay-Artist

The White Room rendered by rs_pbrt

living-room-2_pbrt.tar.gz

Country Kitchen by Jay-Artist

Kitchen rendered by rs_pbrt

kitchen_pbrt.tar.gz

The Wooden Staircase by Wig42

Staircase rendered by rs_pbrt

staircase_pbrt.tar.gz

Conference Room by Anat Grynberg and Greg Ward

Conference room rendered by rs_pbrt

conference_room_pbrt.tar.gz

Theater by Charles Ehrlich and Greg Ward

Theater rendered by rs_pbrt

Theater rendered by rs_pbrt

theater_pbrt.tar.gz

For more info look at the Wiki page or the release notes.

Here you find another Rust implementation:

https://bitbucket.org/abusch/rustracer

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Comments
  • Stochastic Progressive Photon Mapping (SPPM)

    Stochastic Progressive Photon Mapping (SPPM)

    Look at chapter 16.2 of the Physically Based Rendering book for the theoretical background on this topic and a simple test scene for caustics. Let's use that scene to see caustic from light passing through the glass becoming increasingly sharper.

    enhancement 
    opened by wahn 23
  • anim-bluespheres.pbrt

    anim-bluespheres.pbrt

    Compare C++ vs. Rust render times (on purism laptop) :

    $ time ~/builds/pbrt/release/pbrt anim-bluespheres.pbrt
    pbrt version 3 (built Apr  1 2019 at 17:45:44) [Detected 4 cores]
    Copyright (c)1998-2018 Matt Pharr, Greg Humphreys, and Wenzel Jakob.
    The source code to pbrt (but *not* the book contents) is covered by the BSD License.
    See the file LICENSE.txt for the conditions of the license.
    Rendering: [++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++]  (897.6s)
    Statistics:
    ...
    real    14m58.087s
    user    52m55.853s
    sys     0m0.932s
    

    So, the C++ implementation needs about 15 minutes on a 4 processor Linux laptop.

    performance 
    opened by wahn 17
  • Implement DisneyMaterial

    Implement DisneyMaterial

    Recently (in July 2017) Matt Pharr added the DisneyMaterial to the C++ version of PBRT:

    commit d9bfba3e9f185894a67563e9c52b55381fcfeef4
    Author: Matt Pharr <[email protected]>
    Date:   Tue Jul 11 17:07:05 2017 -0700
    
        Added implementation of Disney BSDF
        
        Specifically, this is the extended model with integrated subsurface
        scattering described in
        http://blog.selfshadow.com/publications/s2015-shading-course/burley/s201
        5_pbs_disney_bsdf_notes.pdf.
    

    Let's do the same on the Rust side ...

    task 
    opened by wahn 11
  • Implement FourierMaterial

    Implement FourierMaterial

    The test scene ~/git/gitlab/rs-pbrt-test-scenes/pbrt/pbrt_vw_van/vw-van.pbrt uses a fourier material:

    $ rg fourier /home/jan/git/gitlab/rs-pbrt-test-scenes/pbrt/pbrt_vw_van
    /home/jan/git/gitlab/rs-pbrt-test-scenes/pbrt/pbrt_vw_van/vw-van.pbrt
    55:    "string type" "fourier" "string bsdffile" "bsdfs/ceramic.bsdf"
    

    On the C++ side we have this class:

    // FourierMaterial Declarations
    class FourierMaterial : public Material {
      public:
        // FourierMaterial Public Methods
        FourierMaterial(const std::string &filename,
                        const std::shared_ptr<Texture<Float>> &bump);
        void ComputeScatteringFunctions(SurfaceInteraction *si, MemoryArena &arena,
                                        TransportMode mode,
                                        bool allowMultipleLobes) const;
    
      private:
        // FourierMaterial Private Data
        FourierBSDFTable *bsdfTable;
        std::shared_ptr<Texture<Float>> bumpMap;
        static std::map<std::string, std::unique_ptr<FourierBSDFTable>> loadedBSDFs;
    };
    

    We have to implement the Rust counterpart ...

    task 
    opened by wahn 10
  • Fix integrators (using enum samplers)

    Fix integrators (using enum samplers)

    Did we break anything by replacing the sampler traits by enum?

    Integrator "ambientocclusion":

    > imf_diff -d -f pbrt_rust.exr pbrt.exr
    pbrt_rust.exr pbrt.exr: no differences.
    == "pbrt_rust.exr" and "pbrt.exr" are identical
    

    Integrator "directlighting" "integer maxdepth" [10]:

    > imf_diff -d -f pbrt_rust.exr pbrt.exr
    pbrt_rust.exr pbrt.exr: no differences.
    == "pbrt_rust.exr" and "pbrt.exr" are identical
    

    Integrator "whitted" "integer maxdepth" [5]:

    > imf_diff -d -f pbrt_rust.exr pbrt.exr
    pbrt_rust.exr pbrt.exr: no differences.
    == "pbrt_rust.exr" and "pbrt.exr" are identical
    

    Integrator "path":

    > imf_diff -d -f pbrt_rust.exr pbrt.exr
    pbrt_rust.exr pbrt.exr: no differences.
    == "pbrt_rust.exr" and "pbrt.exr" are identical
    

    Integrator "bdpt":

    > imf_diff -d -f pbrt_rust.exr pbrt.exr diff.jpg
    differing pixels:	 81.946% (204866 of 250000)
    average difference:	 12.432%
    maximum difference:	 85.706%
    Summary: Many pixels differ strongly.
    == "pbrt_rust.exr" and "pbrt.exr" are different
    

    diff

    bug 
    opened by wahn 9
  • Implement HairMaterial

    Implement HairMaterial

    Once we solved issue #37 to create curves, which can be used as hair, we need a matching HairMaterial:

    $ rg '"hair"' ~/Graphics/Rendering/PBRT/pbrt-v3-scenes/hair/
    /home/jan/Graphics/Rendering/PBRT/pbrt-v3-scenes/hair/curly-hair.pbrt
    14:	Material "hair" "float eumelanin" .3
    
    /home/jan/Graphics/Rendering/PBRT/pbrt-v3-scenes/hair/straight-hair.pbrt
    14:	MakeNamedMaterial "black_hair" "string type" [ "hair" ] "float eumelanin" [ 8 ]
    15:	MakeNamedMaterial "red_hair" "string type" [ "hair" ] "float eumelanin" [ 3 ]
    16:	MakeNamedMaterial "brown_hair" "string type" [ "hair" ] "float eumelanin" [ 1.3 ] "float beta_m" .25 "float alpha" 2
    17:	MakeNamedMaterial "blonde_hair" "string type" [ "hair" ] "float	eumelanin" [ .3 ]
    
    /home/jan/Graphics/Rendering/PBRT/pbrt-v3-scenes/hair/sphere-hairblock.pbrt
    17:  Material "hair" "rgb color" [ .2 .8 .3 ]
    

    Here is the source code for the C++ implementation:

    $ rg -tcpp "class HairMaterial :" ~/git/github/pbrt-v3/src/
    /home/jan/git/github/pbrt-v3/src/materials/hair.h
    57:class HairMaterial : public Material {
    
    task 
    opened by wahn 9
  • Fix links in documentation

    Fix links in documentation

    I'm going to move the documentation to a new web page:

    https://www.rs-pbrt.org/doc/crates/pbrt/index.html

    There are some hardcoded paths to https://www.janwalter.org which have to be replaced by relative paths:

    > rg -trust janwalter
    src/lib.rs
    18://! [here]: https://www.janwalter.org/doc/rust/pbrt/integrators/fn.render.html
    19://! [render_bdpt]: https://www.janwalter.org/doc/rust/pbrt/integrators/bdpt/fn.render_bdpt.html
    20://! [render_mlt]: https://www.janwalter.org/doc/rust/pbrt/integrators/mlt/fn.render_mlt.html
    
    src/integrators/mod.rs
    23://! ![Ambient Occlusion](https://www.janwalter.org/assets/cornell_box_pbrt_rust_ao.png)
    33://! ![Direct Lighting](https://www.janwalter.org/assets/cornell_box_v0.1.13.png)
    40://! ![Path Tracing](https://www.janwalter.org/assets/cornell_box_v0.2.0_high.png)
    51://! Tracing](https://www.janwalter.org/assets/art_gallery_pbrt_rust_07n.png)
    
    src/media/mod.rs
    10://! ![A Volumetric Caustic](https://www.janwalter.org/assets/volume-caustic.png)
    
    src/integrators/bdpt.rs
    2177:/// ![bdpt](https://www.janwalter.org/assets/uml/pbrt/render_bdpt.png)
    
    src/integrators/mlt.rs
    390:/// ![bdpt](https://www.janwalter.org/assets/uml/pbrt/render_mlt.png)
    
    src/cameras/mod.rs
    18://! ![Perspective Camera](https://www.janwalter.org/assets/Perspectiva-2.png)
    
    src/materials/mod.rs
    21://! ![HairMaterial](https://www.janwalter.org/assets/hair_rust_pbrt.png)
    25://! ![SubstrateMaterial](https://www.janwalter.org/assets/ganesha.png)
    
    src/samplers/mod.rs
    19://! ![halton](https://www.janwalter.org/assets/pbrt_rust_halton.png)
    28://! ![random](https://www.janwalter.org/assets/pbrt_rust_random.png)
    37://! ![sobol](https://www.janwalter.org/assets/pbrt_rust_sobol.png)
    49://! ![lowdiscrepancy](https://www.janwalter.org/assets/pbrt_rust_lowdiscrepancy.png)
    
    doc 
    opened by wahn 8
  • VW scene

    VW scene

    I will add a new test scene to the GitLab repository (for test scenes):

    pbrt

    This will probably spawn more issues to be created. For example we will have to implement a new material, FourierMaterial:

    $ rg bsdf -B 1  
    vw-van.pbrt
    54-MakeNamedMaterial "Mat.1"  # white painted stuff
    55:    "string type" "fourier" "string bsdffile" "bsdfs/ceramic.bsdf"
    

    Which can read .bsdf files. I'm also not sure if the already existing MetalMaterial can read .spd files:

    $ rg spd -B 3
    vw-van.pbrt
    49-MakeNamedMaterial "Metal - Chrome" 
    50-        "float roughness" [ 0.01 ] 
    51-        "string type" [ "metal" ] 
    52:        "spectrum k" "spds/Al.k.spd"
    53:        "spectrum eta" "spds/Al.eta.spd"
    

    Goal of this issue is to document the progress until we can render the entire VW test scene without changes ...

    enhancement task 
    opened by wahn 8
  • [MLT] bootstrap samples differ

    [MLT] bootstrap samples differ

    Since commit 87b0b5ecb94aaada973381bde8e9497eb9eeb14d we can generate bootstrap paths multi-threaded. While debugging something else I figured that the generated bootstrap samples differ slightly between the C++ and Rust version. To dig deeper into the problem I modified both versions to print out very specialized information regarding the test scene (assets/scenes/caustic.pbrt) and the resulting bootstrap samples.

    In Rust (src/core/sampling.rs):

    impl Distribution1D {
        pub fn new(f: Vec<Float>) -> Self {
            let n: i32 = f.len() as i32;
            // compute integral of step function at $x_i$
            let mut cdf: Vec<Float> = Vec::with_capacity(n as usize + 1);
            cdf.push(0.0 as Float);
            for i in 1..(n + 1) {
    ...
                if n == 600000 && f[(i - 1) as usize] > 0.0 as Float {
                    println!("f[{:?}] = {1:2.8}", i - 1, f[(i - 1) as usize]);
                }
            }
    ...
        }
    ...
    }
    

    In C++ (src/core/sampling.h):

    struct Distribution1D {
        // Distribution1D Public Methods
        Distribution1D(const Float *f, int n) : func(f, f + n), cdf(n + 1) {
            // Compute integral of step function at $x_i$
            cdf[0] = 0;
            for (int i = 1; i < n + 1; ++i) {
              if (n == 600000 && f[i - 1] > 0.0) {
                printf("f[%d] = %2.8f\n", i - 1, f[i - 1]);
              }
    ...
        }
    ...
    };
    

    I will attach the resulting difference between both versions to the issue and report on any progress ...

    bug 
    opened by wahn 7
  • Debug volume-caustic scene

    Debug volume-caustic scene

    For debugging we use a lower resolution and the bdpt integrator, instead of mlt:

    diff --git a/assets/scenes/caustic.pbrt b/assets/scenes/caustic.pbrt                                                                        
    index 382670a..c17389a 100644                                                                                                               
    --- a/assets/scenes/caustic.pbrt                                                                                                            
    +++ b/assets/scenes/caustic.pbrt                                                                                                            
    @@ -3,11 +3,12 @@ MakeNamedMedium "vol"                                                                                                     
             "rgb sigma_a" [ 0.0199999996 0.0199999996 0.0199999996 ]                                                                           
             "rgb sigma_s" [ 0.3499999940 0.3499999940 0.3499999940 ]                                                                           
     Film "image"                                                                                                                               
    -        "integer xresolution" [ 800 ]                                                                                                      
    -        "integer yresolution" [ 800 ]                                                                                                      
    -        "string filename" [ "caustic.exr" ]                                                                                                
    -Integrator "mlt"                                                                                                                           
    -        "integer mutationsperpixel" [ 16384 ]                                                                                              
    +        "integer xresolution" [ 400 ]                                                                                                      
    +        "integer yresolution" [ 400 ]                                                                                                      
    +        "string filename" [ "f16-22a.exr" ]                                                                                                
    +Sampler "02sequence"                                                                                                                       
    +        "integer pixelsamples" [ 64 ]                                                                                                      
    +Integrator "bdpt"                                                                                                                          
     MediumInterface "" "vol"                                                                                                                   
     LookAt -0.75 0.800000012 -1.25                                                                                                             
             -1 0.800000012 0                                                                                                                   
    @@ -30,7 +31,7 @@ AttributeEnd                                                                                                              
     AttributeBegin                                                                                                                             
         Rotate -60 0 0 1                                                                                                                       
         LightSource "infinite"                                                                                                                 
    -            "string mapname" [ "textures/skylight-day.hdr" ]                                                                               
    +            "string mapname" [ "textures/skylight-day.exr" ]                                                                               
                 "rgb scale" [ 1.5000000000 1.5000000000 1.3999999762 ]                                                                         
     AttributeEnd                                                                                                                               
     LightSource "spot"                                                                                                                         
    

    We can render the scene with bdpt (bi-directional path tracing) but the results of the C++ and Rust versions render very differently:

    volume-caustic

    > imf_diff -d f16-22a_cpp.png f16-22a_rust.png diff.jpg
    differing pixels:	100.000% (160000 of 160000)
    average difference:	 51.499%
    maximum difference:	 86.603%
    Summary: Many pixels differ strongly.
    == "f16-22a_cpp.png" and "f16-22a_rust.png" are different
    

    diff

    bug 
    opened by wahn 7
  • Upgrade pest crate

    Upgrade pest crate

    The pest crate reached now version 1.0 (or later): https://github.com/pest-parser/pest This needs some re-writing of the current code in examples/pest_test.rs.

    enhancement 
    opened by wahn 7
  • Rendering progress preview with tev

    Rendering progress preview with tev

    Hey @wahn , It finally happened. I found time again to work on communication with tev. This definitely is just a barely working prototype, but it can actually display progress while rendering. It is just full of unwraps that should be handled properly and many things are done in a very un-rust way, but we have something that works somewhat. At the moment the values sent to tev are not scaled properly and I would love to work on fixing and improving from here on with you together if you can find time.

    opened by iXialumy 0
  • [parse_blend_file] depth of field

    [parse_blend_file] depth of field

    It would be useful to be able to specify depth of field (DOF) settings within the Blender scene and use those on the rs-pbrt side. For .pbrt files those should work correctly already, but forparse_blend_file we still need a way how to translate the settings from the Blender UI to camera settings, which can be used for e.g. the struct PerspectiveCamera. Here an example from the Italian Flat scene:

    pbrt_dof

    In Blender version 2.79 the two settings in questions are shown here:

    dof_blend_settings

    The depth of field distance can be used as parameter focaldistance directly, but Blender's f-stop value has to be translated somehow to PBRT's lensradius (in this example I used lensradius = 0.0125):

    diff --git a/src/cameras/perspective.rs b/src/cameras/perspective.rs                                  
    index 92c77db..72f9d98 100644                                                                         
    --- a/src/cameras/perspective.rs                                                                      
    +++ b/src/cameras/perspective.rs                                                                      
    @@ -173,6 +173,10 @@ impl PerspectiveCamera {                                                         
             //     params.find_one_float(String::from("halffov"), -1.0);                                 
             // TODO: if (halffov > 0.f)                                                                  
             // TODO: let perspective_camera: Arc<Camera + Sync + Send> =                                 
    +       // TMP                                                                                        
    +        let lensradius: Float = 0.0125;                                                              
    +        let focaldistance: Float = 5.6;                                                              
    +       // TMP                                                                                        
             Arc::new(Camera::Perspective(Box::new(PerspectiveCamera::new(                                
                 cam2world,                                                                               
                 screen,                                                                                  
    

    The best solution would be to look into Blender's source code to find a proper translation hint.

    opened by wahn 2
  • [parse_blend_file] Attic Close-up

    [parse_blend_file] Attic Close-up

    On the Blender Cloud there is a project called Attic Close-up (by Gleb Alexandrov). You can download a Blender scene from there. The goal of this issue is to create a similar Blender (version 2.79) scene, which can be used to render directly with parse_blend_file (see examples folder).

    enhancement 
    opened by wahn 5
Releases(v0.9.6)
  • v0.9.6(Mar 16, 2022)

    I released two new versions of my crates last week. The renderer is currently not changing that much anymore. The Windows .msi installer was changed to report the dual licensing correctly (MIT & Apache 2.0), and to contain two executables, one to render .pbrt (v3) files, and one to parse and render Blender's binary .blend files (in theory independent of the Blender version using it's DNA info). Using the crate blend_info not as an executable to inspect a .blend file, but as a crate (like the example mentioned above) is now documented a little more, but I hope to improve the documentation soon, so other people get interested in using blend_info as a crate to cherry pick information they want to re-use in their own code. Examples would be OpenGL or Vulkan viewers of geometry which was modelled within any Blender version ...

    Source code(tar.gz)
    Source code(zip)
    blend_info-0.2.7-x86_64.msi(584.00 KB)
    rs_pbrt-0.9.6-x86_64.msi(4.15 MB)
  • v0.9.5(Feb 10, 2022)

  • v0.9.2(Jun 4, 2021)

    Bug fix for the Ganesha Statue scene (see issue #135).

    Add some command line options to replace the '--cropwindow' option (of the C++ counterpart):

    $ ./target/release/rs_pbrt -h
    rs_pbrt 0.9.2
    Parse a PBRT scene file (extension .pbrt) and render it
    
    USAGE:
        rs_pbrt [OPTIONS] <path>
    
    FLAGS:
        -h, --help       Prints help information
        -V, --version    Prints version information
    
    OPTIONS:
            --cropx0 <cropx0>        Specify an image crop window <x0 x1 y0 y1> [default: 0.0]
            --cropx1 <cropx1>        Specify an image crop window <x0 x1 y0 y1> [default: 1.0]
            --cropy0 <cropy0>        Specify an image crop window <x0 x1 y0 y1> [default: 0.0]
            --cropy1 <cropy1>        Specify an image crop window <x0 x1 y0 y1> [default: 1.0]
        -t, --nthreads <nthreads>    use specified number of threads for rendering [default: 0]
    
    ARGS:
        <path>    The path to the file to read
    
    Source code(tar.gz)
    Source code(zip)
    rs_pbrt-0.9.2-x86_64.msi(2.03 MB)
  • v0.9.0(Mar 25, 2021)

Owner
Jan Walter
I worked for The Mill, mental images, Digital Domain, Mill Film, MPC, NaN, and Fraunhofer.
Jan Walter
List of Rust books

Rust Books Books Starter Books Advanced Books Resources Books Starter Books The Rust Programming Language Free Welcome! This book will teach you about

Spiros Gerokostas 2.2k Jan 9, 2023
Shows how to implement USB device on RP2040 in Rust, in a single file, with no hidden parts.

Rust RP2040 USB Device Example This is a worked example of implementing a USB device on the RP2040 microcontroller, in Rust. It is designed to be easy

Cliff L. Biffle 9 Dec 7, 2022
QQ ChatBot with ChatGPT api, implement in Rust

qbot QQChatBot with ChatGPT gpt-3.5-turbo api Rust 实现,抽象了 cqhttp 的收发消息 msg、openai ai 的消息对象,具有一定管理权限、预设机器人角色、机器人指令等功能。 原理上是接受 cqhttp 的 local websocket

Eucalypt 4 Mar 20, 2023
An inquiry into nondogmatic software development. An experiment showing double performance of the code running on JVM comparing to equivalent native C code.

java-2-times-faster-than-c An experiment showing double performance of the code running on JVM comparing to equivalent native C code ⚠️ The title of t

xemantic 49 Aug 14, 2022
Rust Imaging Library: A high-level Rust imaging crate.

ril Rust Imaging Library: A performant and high-level Rust imaging crate. Documentation • Crates.io • Discord What's this? This is a Rust crate design

Jay3332 18 Jan 5, 2023
An experimental Rust crate for sigstore

Continuous integration Docs License This is an experimental crate to interact with sigstore. This is under high development, many features and checks

Flavio Castelli 0 Jan 10, 2022
Rust on ESP32 STD "Hello, World" app. A "Hello, world!" STD binary crate for the ESP32[XX] and ESP-IDF.

Rust on ESP32 STD "Hello, World" app A "Hello, world!" STD binary crate for the ESP32[XX] and ESP-IDF. This is the crate you get when running cargo ne

Ivan Markov 138 Jan 1, 2023
Rust-idiomatic, compliant, flexible and performant BIP21 crate

Rust implementation of BIP21 Rust-idiomatic, compliant, flexible and performant BIP21 crate. About Important: while lot of work went into polishing th

Martin Habovštiak 6 Dec 15, 2022
Demonstration of how to use the rust object_store crate

Introduction Demonstration of how to use the Rust object_store crate Example

Andrew Lamb 4 Aug 29, 2022
A tool that helps you to turn in one command a Rust crate into a Haskell Cabal library!

cabal-pack A tool that helps you to turn in one command a Rust crate into a Haskell Cabal library! To generate bindings, you need to annotate the Rust

Yvan Sraka 18 Dec 31, 2022
Rust crate implementing short & stable ids based on timestamps

Lexicoid Short & stable IDs based on timestamps. Heavily inspired by Short, friendly base32 slugs from timestamps by @brandur. Install Install with ca

Luciano Mammino 6 Jan 29, 2023
Rust crate for obfuscating string literals.

Obfustring This crate provides a obfuscation macro for string literals. This makes it easy to protect them from common reverse engineering attacks lik

null 7 Mar 1, 2023
c-library wrapper around the rust pdb crate

pdbcrust: pdbcrust is a c-library wrapper around the rust pdb crate. The API only exports a minimum subset of the pdb crate functionality. The project

Ulf Frisk 7 Feb 23, 2023
🦀 Rust crate that allows creating weighted prefix trees that can be used in autocomplete

weighted_trie ?? Rust crate that allows creating weighted prefix trees that can be used in autocomplete Released API Docs Quickstart To use weigthed-t

Alexander Osipenko 8 Mar 1, 2023
A Rust crate providing utility functions and macros.

介绍 此库提供四类功能:异常处理、http post收发对象、格式转换、语法糖。 在 Cargo.toml 里添加如下依赖项 [dependencies.xuanmi_base_support] git = "https://github.com/taiyi-research-institute/x

null 17 Mar 22, 2023
Rust crate: Overloaded Literals to construct your datatypes without boilerplate and with compile-time validation.

overloaded_literals   Overloaded Literals to construct your datatypes without boilerplate and with compile-time validation. Features Compile-time vali

Qqwy / Marten 6 Apr 14, 2023
⚛ Quantum computing crate for Rust programming language.

?? Quantum crab Quantum crab is a quantum computing crate for Rust programming language. use quantum_crab::{ backend::Backend, quantum_circuit

Adi Salimgereyev 4 May 22, 2023
A Rust crate that implements a range map data structure backed by a Vec.

range_map_vec This crate implements a range map data structure backed by a Vec using binary search. Docs and usage can be found in the corresponding r

Microsoft 9 Sep 8, 2023
A rust crate can find first `Err` in `Iterator>` and iterating continuously, without allocation.

Api Document first-err Find the first Err in Iterator<Result<T, E>> and allow iterating continuously. This crate is specifically designed to replace t

null 3 Oct 28, 2023