Skip to content

Commit b10e3f8

Browse files
committed
refactor: move ffi to separate file
1 parent b0f6bf1 commit b10e3f8

File tree

2 files changed

+112
-115
lines changed

2 files changed

+112
-115
lines changed

src/ffi.rs

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
use std::ffi::c_char;
2+
3+
#[repr(C)]
4+
pub struct ada_url {
5+
_unused: [u8; 0],
6+
_marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
7+
}
8+
9+
#[repr(C)]
10+
pub struct ada_string {
11+
pub data: *const c_char,
12+
pub length: usize,
13+
}
14+
15+
impl ada_string {
16+
pub fn as_str(self) -> &'static str {
17+
unsafe {
18+
let slice = std::slice::from_raw_parts(self.data.cast(), self.length);
19+
std::str::from_utf8_unchecked(slice)
20+
}
21+
}
22+
}
23+
24+
#[repr(C)]
25+
pub struct ada_owned_string {
26+
pub data: *const c_char,
27+
pub length: usize,
28+
}
29+
30+
impl AsRef<str> for ada_owned_string {
31+
fn as_ref(&self) -> &str {
32+
unsafe {
33+
let slice = std::slice::from_raw_parts(self.data.cast(), self.length);
34+
std::str::from_utf8_unchecked(slice)
35+
}
36+
}
37+
}
38+
39+
#[repr(C)]
40+
pub struct ada_url_components {
41+
pub protocol_end: u32,
42+
pub username_end: u32,
43+
pub host_start: u32,
44+
pub host_end: u32,
45+
pub port: u32,
46+
pub pathname_start: u32,
47+
pub search_start: u32,
48+
pub hash_start: u32,
49+
}
50+
51+
extern "C" {
52+
pub fn ada_parse(input: *const c_char, length: usize) -> *mut ada_url;
53+
pub fn ada_parse_with_base(
54+
input: *const c_char,
55+
input_length: usize,
56+
base: *const c_char,
57+
base_length: usize,
58+
) -> *mut ada_url;
59+
pub fn ada_free(url: *mut ada_url);
60+
pub fn ada_free_owned_string(url: *mut ada_owned_string);
61+
pub fn ada_is_valid(url: *mut ada_url) -> bool;
62+
pub fn ada_can_parse(url: *const c_char, length: usize) -> bool;
63+
pub fn ada_can_parse_with_base(
64+
input: *const c_char,
65+
input_length: usize,
66+
base: *const c_char,
67+
base_length: usize,
68+
) -> bool;
69+
pub fn ada_get_components(url: *mut ada_url) -> *mut ada_url_components;
70+
71+
// Getters
72+
pub fn ada_get_origin(url: *mut ada_url) -> ada_owned_string;
73+
pub fn ada_get_href(url: *mut ada_url) -> ada_string;
74+
pub fn ada_get_username(url: *mut ada_url) -> ada_string;
75+
pub fn ada_get_password(url: *mut ada_url) -> ada_string;
76+
pub fn ada_get_port(url: *mut ada_url) -> ada_string;
77+
pub fn ada_get_hash(url: *mut ada_url) -> ada_string;
78+
pub fn ada_get_host(url: *mut ada_url) -> ada_string;
79+
pub fn ada_get_hostname(url: *mut ada_url) -> ada_string;
80+
pub fn ada_get_pathname(url: *mut ada_url) -> ada_string;
81+
pub fn ada_get_search(url: *mut ada_url) -> ada_string;
82+
pub fn ada_get_protocol(url: *mut ada_url) -> ada_string;
83+
84+
// Setters
85+
pub fn ada_set_href(url: *mut ada_url, input: *const c_char, length: usize) -> bool;
86+
pub fn ada_set_username(url: *mut ada_url, input: *const c_char, length: usize) -> bool;
87+
pub fn ada_set_password(url: *mut ada_url, input: *const c_char, length: usize) -> bool;
88+
pub fn ada_set_port(url: *mut ada_url, input: *const c_char, length: usize) -> bool;
89+
pub fn ada_set_hash(url: *mut ada_url, input: *const c_char, length: usize);
90+
pub fn ada_set_host(url: *mut ada_url, input: *const c_char, length: usize) -> bool;
91+
pub fn ada_set_hostname(url: *mut ada_url, input: *const c_char, length: usize) -> bool;
92+
pub fn ada_set_pathname(url: *mut ada_url, input: *const c_char, length: usize) -> bool;
93+
pub fn ada_set_search(url: *mut ada_url, input: *const c_char, length: usize);
94+
pub fn ada_set_protocol(url: *mut ada_url, input: *const c_char, length: usize) -> bool;
95+
96+
// Validators
97+
pub fn ada_has_credentials(url: *mut ada_url) -> bool;
98+
pub fn ada_has_empty_hostname(url: *mut ada_url) -> bool;
99+
pub fn ada_has_hostname(url: *mut ada_url) -> bool;
100+
pub fn ada_has_non_empty_username(url: *mut ada_url) -> bool;
101+
pub fn ada_has_non_empty_password(url: *mut ada_url) -> bool;
102+
pub fn ada_has_port(url: *mut ada_url) -> bool;
103+
pub fn ada_has_password(url: *mut ada_url) -> bool;
104+
pub fn ada_has_hash(url: *mut ada_url) -> bool;
105+
pub fn ada_has_search(url: *mut ada_url) -> bool;
106+
107+
// IDNA methods
108+
pub fn ada_idna_to_unicode(input: *const c_char, length: usize) -> ada_owned_string;
109+
pub fn ada_idna_to_ascii(input: *const c_char, length: usize) -> ada_owned_string;
110+
}

src/lib.rs

Lines changed: 2 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -20,126 +20,13 @@
2020
//! CURL ▏ 1471 ns/URL █████████████████████████
2121
//! ```
2222
23+
pub mod ffi;
2324
mod idna;
25+
pub use idna::Idna;
2426

2527
use std::{borrow, fmt, hash, ops};
2628
use thiserror::Error;
2729

28-
pub use idna::Idna;
29-
30-
pub mod ffi {
31-
use std::ffi::c_char;
32-
33-
#[repr(C)]
34-
pub struct ada_url {
35-
_unused: [u8; 0],
36-
_marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
37-
}
38-
39-
#[repr(C)]
40-
pub struct ada_string {
41-
pub data: *const c_char,
42-
pub length: usize,
43-
}
44-
45-
impl ada_string {
46-
pub fn as_str(self) -> &'static str {
47-
unsafe {
48-
let slice = std::slice::from_raw_parts(self.data.cast(), self.length);
49-
std::str::from_utf8_unchecked(slice)
50-
}
51-
}
52-
}
53-
54-
#[repr(C)]
55-
pub struct ada_owned_string {
56-
pub data: *const c_char,
57-
pub length: usize,
58-
}
59-
60-
impl AsRef<str> for ada_owned_string {
61-
fn as_ref(&self) -> &str {
62-
unsafe {
63-
let slice = std::slice::from_raw_parts(self.data.cast(), self.length);
64-
std::str::from_utf8_unchecked(slice)
65-
}
66-
}
67-
}
68-
69-
#[repr(C)]
70-
pub struct ada_url_components {
71-
pub protocol_end: u32,
72-
pub username_end: u32,
73-
pub host_start: u32,
74-
pub host_end: u32,
75-
pub port: u32,
76-
pub pathname_start: u32,
77-
pub search_start: u32,
78-
pub hash_start: u32,
79-
}
80-
81-
extern "C" {
82-
pub fn ada_parse(input: *const c_char, length: usize) -> *mut ada_url;
83-
pub fn ada_parse_with_base(
84-
input: *const c_char,
85-
input_length: usize,
86-
base: *const c_char,
87-
base_length: usize,
88-
) -> *mut ada_url;
89-
pub fn ada_free(url: *mut ada_url);
90-
pub fn ada_free_owned_string(url: *mut ada_owned_string);
91-
pub fn ada_is_valid(url: *mut ada_url) -> bool;
92-
pub fn ada_can_parse(url: *const c_char, length: usize) -> bool;
93-
pub fn ada_can_parse_with_base(
94-
input: *const c_char,
95-
input_length: usize,
96-
base: *const c_char,
97-
base_length: usize,
98-
) -> bool;
99-
pub fn ada_get_components(url: *mut ada_url) -> *mut ada_url_components;
100-
101-
// Getters
102-
pub fn ada_get_origin(url: *mut ada_url) -> ada_owned_string;
103-
pub fn ada_get_href(url: *mut ada_url) -> ada_string;
104-
pub fn ada_get_username(url: *mut ada_url) -> ada_string;
105-
pub fn ada_get_password(url: *mut ada_url) -> ada_string;
106-
pub fn ada_get_port(url: *mut ada_url) -> ada_string;
107-
pub fn ada_get_hash(url: *mut ada_url) -> ada_string;
108-
pub fn ada_get_host(url: *mut ada_url) -> ada_string;
109-
pub fn ada_get_hostname(url: *mut ada_url) -> ada_string;
110-
pub fn ada_get_pathname(url: *mut ada_url) -> ada_string;
111-
pub fn ada_get_search(url: *mut ada_url) -> ada_string;
112-
pub fn ada_get_protocol(url: *mut ada_url) -> ada_string;
113-
114-
// Setters
115-
pub fn ada_set_href(url: *mut ada_url, input: *const c_char, length: usize) -> bool;
116-
pub fn ada_set_username(url: *mut ada_url, input: *const c_char, length: usize) -> bool;
117-
pub fn ada_set_password(url: *mut ada_url, input: *const c_char, length: usize) -> bool;
118-
pub fn ada_set_port(url: *mut ada_url, input: *const c_char, length: usize) -> bool;
119-
pub fn ada_set_hash(url: *mut ada_url, input: *const c_char, length: usize);
120-
pub fn ada_set_host(url: *mut ada_url, input: *const c_char, length: usize) -> bool;
121-
pub fn ada_set_hostname(url: *mut ada_url, input: *const c_char, length: usize) -> bool;
122-
pub fn ada_set_pathname(url: *mut ada_url, input: *const c_char, length: usize) -> bool;
123-
pub fn ada_set_search(url: *mut ada_url, input: *const c_char, length: usize);
124-
pub fn ada_set_protocol(url: *mut ada_url, input: *const c_char, length: usize) -> bool;
125-
126-
// Validators
127-
pub fn ada_has_credentials(url: *mut ada_url) -> bool;
128-
pub fn ada_has_empty_hostname(url: *mut ada_url) -> bool;
129-
pub fn ada_has_hostname(url: *mut ada_url) -> bool;
130-
pub fn ada_has_non_empty_username(url: *mut ada_url) -> bool;
131-
pub fn ada_has_non_empty_password(url: *mut ada_url) -> bool;
132-
pub fn ada_has_port(url: *mut ada_url) -> bool;
133-
pub fn ada_has_password(url: *mut ada_url) -> bool;
134-
pub fn ada_has_hash(url: *mut ada_url) -> bool;
135-
pub fn ada_has_search(url: *mut ada_url) -> bool;
136-
137-
// IDNA methods
138-
pub fn ada_idna_to_unicode(input: *const c_char, length: usize) -> ada_owned_string;
139-
pub fn ada_idna_to_ascii(input: *const c_char, length: usize) -> ada_owned_string;
140-
}
141-
}
142-
14330
#[derive(Error, Debug)]
14431
pub enum Error {
14532
#[error("Invalid url: \"{0}\"")]

0 commit comments

Comments
 (0)