Skip to main content

JsonOutput

Struct JsonOutput 

Source
pub struct JsonOutput {
    pub matches: Vec<JsonMatchResult>,
}
Expand description

JSON output structure containing an array of matches

This structure represents the complete JSON output format for file type detection results, containing an array of matches that can be serialized to JSON for programmatic consumption.

§Examples

use libmagic_rs::output::json::{JsonOutput, JsonMatchResult};

let json_output = JsonOutput {
    matches: vec![
        JsonMatchResult::new(
            "ELF executable".to_string(),
            0,
            "7f454c46".to_string(),
            vec!["executable".to_string(), "elf".to_string()],
            90
        )
    ]
};

assert_eq!(json_output.matches.len(), 1);

Fields§

§matches: Vec<JsonMatchResult>

Array of match results found during evaluation

Implementations§

Source§

impl JsonOutput

Source

pub fn new(matches: Vec<JsonMatchResult>) -> Self

Create a new JSON output structure

§Arguments
  • matches - Vector of JSON match results
§Examples
use libmagic_rs::output::json::{JsonOutput, JsonMatchResult};

let matches = vec![
    JsonMatchResult::new(
        "Text file".to_string(),
        0,
        "48656c6c6f".to_string(),
        vec!["text".to_string()],
        60
    )
];

let output = JsonOutput::new(matches);
assert_eq!(output.matches.len(), 1);
Source

pub fn from_evaluation_result(result: &EvaluationResult) -> Self

Create JSON output from an EvaluationResult

Converts the internal evaluation result to the JSON format specified in the original libmagic specification.

§Arguments
  • result - The evaluation result to convert
§Examples
use libmagic_rs::output::{EvaluationResult, MatchResult, EvaluationMetadata, json::JsonOutput};
use libmagic_rs::parser::ast::Value;
use std::path::PathBuf;

let match_result = MatchResult::with_metadata(
    "Binary data".to_string(),
    0,
    4,
    Value::Bytes(vec![0xde, 0xad, 0xbe, 0xef]),
    vec!["binary".to_string()],
    70,
    None
);

let metadata = EvaluationMetadata::new(1024, 1.5, 10, 1);
let eval_result = EvaluationResult::new(
    PathBuf::from("test.bin"),
    vec![match_result],
    metadata
);

let json_output = JsonOutput::from_evaluation_result(&eval_result);
assert_eq!(json_output.matches.len(), 1);
assert_eq!(json_output.matches[0].text, "Binary data");
assert_eq!(json_output.matches[0].value, "deadbeef");
Source

pub fn add_match(&mut self, match_result: JsonMatchResult)

Add a match result to the output

§Examples
use libmagic_rs::output::json::{JsonOutput, JsonMatchResult};

let mut output = JsonOutput::new(vec![]);

let match_result = JsonMatchResult::new(
    "PDF document".to_string(),
    0,
    "25504446".to_string(),
    vec!["document".to_string(), "pdf".to_string()],
    85
);

output.add_match(match_result);
assert_eq!(output.matches.len(), 1);
Source

pub fn has_matches(&self) -> bool

Check if there are any matches

§Examples
use libmagic_rs::output::json::JsonOutput;

let empty_output = JsonOutput::new(vec![]);
assert!(!empty_output.has_matches());

let output_with_matches = JsonOutput::new(vec![
    libmagic_rs::output::json::JsonMatchResult::new(
        "Test".to_string(),
        0,
        "74657374".to_string(),
        vec![],
        50
    )
]);
assert!(output_with_matches.has_matches());
Source

pub fn match_count(&self) -> usize

Get the number of matches

§Examples
use libmagic_rs::output::json::{JsonOutput, JsonMatchResult};

let matches = vec![
    JsonMatchResult::new("Match 1".to_string(), 0, "01".to_string(), vec![], 50),
    JsonMatchResult::new("Match 2".to_string(), 10, "02".to_string(), vec![], 60),
];

let output = JsonOutput::new(matches);
assert_eq!(output.match_count(), 2);

Trait Implementations§

Source§

impl Clone for JsonOutput

Source§

fn clone(&self) -> JsonOutput

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for JsonOutput

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for JsonOutput

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for JsonOutput

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,