Git Product home page Git Product logo

rust-libxml's Introduction

Build Status API Documentation License crates.io

Rust wrapper for libxml2.

The main goal of this project is to benefit from libxml2's maturity and stability while the native Rust XML crates mature to be near-drop-in replacements.

As of the 0.2.0 release of the crate, there are some modest safety guarantees:

  • Mutability, as well as ownership - we use Rc<RefCell<T>> wrappers to ensure runtime safety of libxml2 operations already in the Rust layer.
  • Memory safety guarantees - in particular Node and Document objects have automatic bookkeeping and deallocation on drop, for leak-free wrapper use.
  • No thread safety - libxml2's global memory management is a challenge to adapt in a thread-safe way with minimal intervention

Coverage: Only covers a subset of libxml2 at the moment, contributions are welcome. We try to increase support with each release.

Welcome! With these caveats, the contributors to the project are migrating production work towards Rust and find a continuing reliance on libxml2 a helpful relief for initial ports. As such, contributions to this crate are welcome, if your workflow is not yet fully supported.

Installation prerequisites

Before performing the usual cargo build/install steps, you need to have the relevant components for using the original libxml2 code. These may become gradually outdated with time - please do let us know by opening a new issue/PR whenever that's the case.

Linux/Debian

On linux systems you'd need the development headers of libxml2 (e.g. libxml2-dev in Debian), as well as pkg-config.

MacOS

Community contributed:

$ brew install libxml2 # e.g. version 2.9.12 
$ ln -s /usr/local/Cellar/libxml2/2.9.12/lib/libxml2.2.dylib /usr/local/lib/libxml-2.0.dylib
$ export LIBXML2=/usr/local/Cellar/libxml2/2.9.12/lib/pkgconfig/libxml-2.0.pc

Windows

Community contributed:

  • manually install builds tools c++ and english language by visiting BuildTools
  • launch cmd prompt with admin privileges and execute these commands sequentially:
C:\> git clone https://github.com/microsoft/vcpkg
C:\> .\vcpkg\bootstrap-vcpkg.bat
C:\> setx /M PATH "%PATH%;c:\vcpkg" && setx VCPKGRS_DYNAMIC "1" /M
C:\> refreshenv
C:\> vcpkg install libxml2:x64-windows
C:\> vcpkg integrate install

rust-libxml's People

Contributors

asmuth avatar caldwell avatar cbarber avatar dependabot-preview[bot] avatar dginev avatar grray avatar jameswald avatar jangernert avatar joshuanitschke avatar luc-tielen avatar przygienda avatar ramn avatar ravualhemio avatar tianyishi2001 avatar triptec avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.