pub struct World { /* private fields */ }Expand description
The world represents all Lilv state. It is used to discover/load/cache LV2 data (plugins, UIs, and extensions).
Implementations§
Source§impl World
impl World
Sourcepub fn new() -> Self
pub fn new() -> Self
Examples found in repository?
3fn main() {
4 let world = World::new();
5 world.load_all();
6
7 let show_names = false;
8
9 let print = |plugin: Plugin| {
10 if show_names {
11 String::from(plugin.name().as_str().unwrap())
12 } else {
13 String::from(plugin.uri().as_uri().unwrap())
14 }
15 };
16
17 let plugins = world
18 .plugins()
19 .iter()
20 .filter(Plugin::verify)
21 .map(print)
22 .collect::<Vec<_>>();
23
24 debug_assert_eq!(world.plugins().count(), plugins.len());
25
26 for uri in plugins {
27 println!("{}", uri);
28 }
29}More examples
235fn main() {
236 let w = World::new();
237 w.load_all();
238
239 let nodes = Nodes {
240 control_class: w.new_uri("http://lv2plug.in/ns/lv2core#ControlPort"),
241 event_class: w.new_uri("http://lv2plug.in/ns/ext/atom#AtomPort"),
242 group_pred: w.new_uri("http://lv2plug.in/ns/ext/port-groups#group"),
243 label_pred: w.new_uri("http://www.w3.org/2000/01/rdf-schema#label"),
244 preset_class: w.new_uri("http://lv2plug.in/ns/ext/presets#Preset"),
245 designation_pred: w.new_uri("http://lv2plug.in/ns/lv2core#designation"),
246 supports_event_pred: w.new_uri("http://lv2plug.in/ns/ext/atom#supportsEvent"),
247 };
248
249 for p in w.plugins().iter().filter(Plugin::verify) {
250 print_plugin(&w, &p, &nodes);
251 }
252}Sourcepub fn with_load_all() -> World
pub fn with_load_all() -> World
Loads a new world with all the installed LV2 bundles on the system.
§Example
let world = lilv::World::new();
world.load_all();Source§impl World
impl World
Sourcepub fn plugin_class(&self) -> Option<Class>
pub fn plugin_class(&self) -> Option<Class>
Get the parent of all other plugin classes, lv2:Plugin.
Sourcepub fn plugins(&self) -> Plugins
pub fn plugins(&self) -> Plugins
An iterable over all the plugins in the world.
Examples found in repository?
3fn main() {
4 let world = World::new();
5 world.load_all();
6
7 let show_names = false;
8
9 let print = |plugin: Plugin| {
10 if show_names {
11 String::from(plugin.name().as_str().unwrap())
12 } else {
13 String::from(plugin.uri().as_uri().unwrap())
14 }
15 };
16
17 let plugins = world
18 .plugins()
19 .iter()
20 .filter(Plugin::verify)
21 .map(print)
22 .collect::<Vec<_>>();
23
24 debug_assert_eq!(world.plugins().count(), plugins.len());
25
26 for uri in plugins {
27 println!("{}", uri);
28 }
29}More examples
235fn main() {
236 let w = World::new();
237 w.load_all();
238
239 let nodes = Nodes {
240 control_class: w.new_uri("http://lv2plug.in/ns/lv2core#ControlPort"),
241 event_class: w.new_uri("http://lv2plug.in/ns/ext/atom#AtomPort"),
242 group_pred: w.new_uri("http://lv2plug.in/ns/ext/port-groups#group"),
243 label_pred: w.new_uri("http://www.w3.org/2000/01/rdf-schema#label"),
244 preset_class: w.new_uri("http://lv2plug.in/ns/ext/presets#Preset"),
245 designation_pred: w.new_uri("http://lv2plug.in/ns/lv2core#designation"),
246 supports_event_pred: w.new_uri("http://lv2plug.in/ns/ext/atom#supportsEvent"),
247 };
248
249 for p in w.plugins().iter().filter(Plugin::verify) {
250 print_plugin(&w, &p, &nodes);
251 }
252}Source§impl World
impl World
Sourcepub fn new_uri(&self, uri: &str) -> Node
pub fn new_uri(&self, uri: &str) -> Node
Examples found in repository?
235fn main() {
236 let w = World::new();
237 w.load_all();
238
239 let nodes = Nodes {
240 control_class: w.new_uri("http://lv2plug.in/ns/lv2core#ControlPort"),
241 event_class: w.new_uri("http://lv2plug.in/ns/ext/atom#AtomPort"),
242 group_pred: w.new_uri("http://lv2plug.in/ns/ext/port-groups#group"),
243 label_pred: w.new_uri("http://www.w3.org/2000/01/rdf-schema#label"),
244 preset_class: w.new_uri("http://lv2plug.in/ns/ext/presets#Preset"),
245 designation_pred: w.new_uri("http://lv2plug.in/ns/lv2core#designation"),
246 supports_event_pred: w.new_uri("http://lv2plug.in/ns/ext/atom#supportsEvent"),
247 };
248
249 for p in w.plugins().iter().filter(Plugin::verify) {
250 print_plugin(&w, &p, &nodes);
251 }
252}Sourcepub fn new_string(&self, string: &str) -> Node
pub fn new_string(&self, string: &str) -> Node
Source§impl World
impl World
Sourcepub fn load_all(&self)
pub fn load_all(&self)
Loads all installed LV2 bundles on the system.
§Example
let world = lilv::World::new();
world.load_all();Examples found in repository?
3fn main() {
4 let world = World::new();
5 world.load_all();
6
7 let show_names = false;
8
9 let print = |plugin: Plugin| {
10 if show_names {
11 String::from(plugin.name().as_str().unwrap())
12 } else {
13 String::from(plugin.uri().as_uri().unwrap())
14 }
15 };
16
17 let plugins = world
18 .plugins()
19 .iter()
20 .filter(Plugin::verify)
21 .map(print)
22 .collect::<Vec<_>>();
23
24 debug_assert_eq!(world.plugins().count(), plugins.len());
25
26 for uri in plugins {
27 println!("{}", uri);
28 }
29}More examples
235fn main() {
236 let w = World::new();
237 w.load_all();
238
239 let nodes = Nodes {
240 control_class: w.new_uri("http://lv2plug.in/ns/lv2core#ControlPort"),
241 event_class: w.new_uri("http://lv2plug.in/ns/ext/atom#AtomPort"),
242 group_pred: w.new_uri("http://lv2plug.in/ns/ext/port-groups#group"),
243 label_pred: w.new_uri("http://www.w3.org/2000/01/rdf-schema#label"),
244 preset_class: w.new_uri("http://lv2plug.in/ns/ext/presets#Preset"),
245 designation_pred: w.new_uri("http://lv2plug.in/ns/lv2core#designation"),
246 supports_event_pred: w.new_uri("http://lv2plug.in/ns/ext/atom#supportsEvent"),
247 };
248
249 for p in w.plugins().iter().filter(Plugin::verify) {
250 print_plugin(&w, &p, &nodes);
251 }
252}Sourcepub fn load_bundle(&self, bundle_uri: &Node)
pub fn load_bundle(&self, bundle_uri: &Node)
Loads a specific bundle. bundle_uri must be a fully qualified URI to the bundle directory,
with the trailing slash, eg file:///usr/lib/lv2/foo.lv2/.
Sourcepub fn load_specifications(&self)
pub fn load_specifications(&self)
Loads all specifications from currently loaded bundles.
This is for hosts that explicitly load specific bundles, its use is not
necessary when using load_all. This function parses the specifications
and adds them to the model.
Sourcepub fn load_plugin_classes(&self)
pub fn load_plugin_classes(&self)
Load all plugin classes from currently loaded specifications.
Must be called after load_specifications. This is for hosts
that explicitly load specific bundles; its use is not necessary when using
load_all.
Sourcepub unsafe fn unload_bundle(&self, bundle_uri: &Node) -> bool
pub unsafe fn unload_bundle(&self, bundle_uri: &Node) -> bool
Unload a specific bundle.
This unloads statements loaded by load_bundle. Note this is not necessarily all
information loaded from the bundle. If any resources have been separately loaded with
load_resource, they must be separately unloaded with
unload_resource.
§Safety
Unloading bundles that are in use by the host will cause undefined behaviour.
Sourcepub fn load_resource(&self, resource: &Node) -> Option<usize>
pub fn load_resource(&self, resource: &Node) -> Option<usize>
Examples found in repository?
101fn print_plugin(world: &World, p: &Plugin, nodes: &Nodes) {
102 println!("{}\n", p.uri().as_uri().unwrap());
103 println!("\tName: {}", p.name().as_str().unwrap());
104 println!(
105 "\tClass: {}",
106 p.class().label().as_str().unwrap()
107 );
108
109 if let Some(val) = p.author_name() {
110 println!("\tAuthor: {}", val.as_str().unwrap());
111 }
112
113 if let Some(val) = p.author_email() {
114 println!("\tAuthor Email: {}", val.as_str().unwrap());
115 }
116
117 if let Some(val) = p.author_homepage() {
118 println!("\tAuthor Homepage: {}", val.as_uri().unwrap());
119 }
120
121 if let Some(latency_port) = p.latency_port_index() {
122 println!(
123 "\tHas latency: yes, reported by port {}",
124 latency_port
125 );
126 } else {
127 println!("\tHas latency: no");
128 }
129
130 println!("\tBundle: {}", p.bundle_uri().as_uri().unwrap());
131 println!(
132 "\tBinary: {}",
133 p.library_uri().map_or("<none>".to_string(), |node| node
134 .as_uri()
135 .unwrap()
136 .to_string())
137 );
138
139 if let Some(uis) = p.uis() {
140 println!("\tUIs:");
141
142 for ui in uis {
143 println!("\t\t{}", ui.uri().as_uri().unwrap());
144
145 for tyep in ui.classes() {
146 println!("\t\t\tClass: {}", tyep.as_uri().unwrap());
147 }
148
149 println!(
150 "\t\t\tBinary: {}",
151 ui.binary_uri().unwrap().as_uri().unwrap()
152 );
153 println!(
154 "\t\t\tBundle: {}",
155 ui.bundle_uri().unwrap().as_uri().unwrap()
156 );
157 }
158 }
159
160 print!("\tData URIs: ");
161
162 for (i, uri) in p.data_uris().iter().enumerate() {
163 if i != 0 {
164 print!("\n\t ");
165 }
166
167 print!("{}", uri.as_uri().unwrap());
168 }
169
170 println!();
171
172 let features = p.required_features();
173 print!("\tRequired Features: ");
174
175 for (i, feature) in features.iter().enumerate() {
176 if i != 0 {
177 print!("\n\t ");
178 }
179 print!("{}", feature.as_uri().unwrap());
180 }
181 println!();
182
183 let features = p.optional_features();
184 print!("\tOptional Features: ");
185
186 for (i, feature) in features.iter().enumerate() {
187 if i != 0 {
188 print!("\n\t ");
189 }
190 print!("{}", feature.as_uri().unwrap());
191 }
192 println!();
193
194 if let Some(data) = p.extension_data() {
195 print!("\tExtension Data: ");
196
197 for (i, d) in data.iter().enumerate() {
198 if i != 0 {
199 print!("\n\t ");
200 }
201 print!("{}", d.as_uri().unwrap());
202 }
203 println!();
204 }
205
206 if let Some(presets) = p.related(Some(&nodes.preset_class)) {
207 if presets.count() != 0 {
208 println!("\tPresets: ");
209
210 for preset in presets {
211 world.load_resource(&preset).unwrap();
212
213 let titles = world.find_nodes(Some(&preset), &nodes.label_pred, None);
214 if titles.count() > 0 {
215 if let Some(title) = titles.iter().next() {
216 println!("\t {}", title.as_str().unwrap());
217 } else {
218 println!("\t <{}>", preset.as_uri().unwrap());
219 }
220 } else {
221 println!("\t <{}>", preset.as_uri().unwrap());
222 }
223 }
224 }
225 }
226
227 let num_ports = p.ports_count();
228 let port_ranges = p.port_ranges_float();
229 assert_eq!(num_ports, port_ranges.len());
230 for (i, pr) in port_ranges.iter().enumerate() {
231 print_port(p, i, pr, nodes);
232 }
233}Sourcepub unsafe fn unload_resource(&self, resource: &Node) -> bool
pub unsafe fn unload_resource(&self, resource: &Node) -> bool
Unload all the data associated with the given resource.
§Safety
Unloading resources that are in use by the host will cause undefined behaviour.
Source§impl World
impl World
Sourcepub fn find_nodes(
&self,
subject: Option<&Node>,
predicate: &Node,
object: Option<&Node>,
) -> Nodes
pub fn find_nodes( &self, subject: Option<&Node>, predicate: &Node, object: Option<&Node>, ) -> Nodes
Find nodes matching a triple pattern. Either subject or object may be None, but not both.
Examples found in repository?
101fn print_plugin(world: &World, p: &Plugin, nodes: &Nodes) {
102 println!("{}\n", p.uri().as_uri().unwrap());
103 println!("\tName: {}", p.name().as_str().unwrap());
104 println!(
105 "\tClass: {}",
106 p.class().label().as_str().unwrap()
107 );
108
109 if let Some(val) = p.author_name() {
110 println!("\tAuthor: {}", val.as_str().unwrap());
111 }
112
113 if let Some(val) = p.author_email() {
114 println!("\tAuthor Email: {}", val.as_str().unwrap());
115 }
116
117 if let Some(val) = p.author_homepage() {
118 println!("\tAuthor Homepage: {}", val.as_uri().unwrap());
119 }
120
121 if let Some(latency_port) = p.latency_port_index() {
122 println!(
123 "\tHas latency: yes, reported by port {}",
124 latency_port
125 );
126 } else {
127 println!("\tHas latency: no");
128 }
129
130 println!("\tBundle: {}", p.bundle_uri().as_uri().unwrap());
131 println!(
132 "\tBinary: {}",
133 p.library_uri().map_or("<none>".to_string(), |node| node
134 .as_uri()
135 .unwrap()
136 .to_string())
137 );
138
139 if let Some(uis) = p.uis() {
140 println!("\tUIs:");
141
142 for ui in uis {
143 println!("\t\t{}", ui.uri().as_uri().unwrap());
144
145 for tyep in ui.classes() {
146 println!("\t\t\tClass: {}", tyep.as_uri().unwrap());
147 }
148
149 println!(
150 "\t\t\tBinary: {}",
151 ui.binary_uri().unwrap().as_uri().unwrap()
152 );
153 println!(
154 "\t\t\tBundle: {}",
155 ui.bundle_uri().unwrap().as_uri().unwrap()
156 );
157 }
158 }
159
160 print!("\tData URIs: ");
161
162 for (i, uri) in p.data_uris().iter().enumerate() {
163 if i != 0 {
164 print!("\n\t ");
165 }
166
167 print!("{}", uri.as_uri().unwrap());
168 }
169
170 println!();
171
172 let features = p.required_features();
173 print!("\tRequired Features: ");
174
175 for (i, feature) in features.iter().enumerate() {
176 if i != 0 {
177 print!("\n\t ");
178 }
179 print!("{}", feature.as_uri().unwrap());
180 }
181 println!();
182
183 let features = p.optional_features();
184 print!("\tOptional Features: ");
185
186 for (i, feature) in features.iter().enumerate() {
187 if i != 0 {
188 print!("\n\t ");
189 }
190 print!("{}", feature.as_uri().unwrap());
191 }
192 println!();
193
194 if let Some(data) = p.extension_data() {
195 print!("\tExtension Data: ");
196
197 for (i, d) in data.iter().enumerate() {
198 if i != 0 {
199 print!("\n\t ");
200 }
201 print!("{}", d.as_uri().unwrap());
202 }
203 println!();
204 }
205
206 if let Some(presets) = p.related(Some(&nodes.preset_class)) {
207 if presets.count() != 0 {
208 println!("\tPresets: ");
209
210 for preset in presets {
211 world.load_resource(&preset).unwrap();
212
213 let titles = world.find_nodes(Some(&preset), &nodes.label_pred, None);
214 if titles.count() > 0 {
215 if let Some(title) = titles.iter().next() {
216 println!("\t {}", title.as_str().unwrap());
217 } else {
218 println!("\t <{}>", preset.as_uri().unwrap());
219 }
220 } else {
221 println!("\t <{}>", preset.as_uri().unwrap());
222 }
223 }
224 }
225 }
226
227 let num_ports = p.ports_count();
228 let port_ranges = p.port_ranges_float();
229 assert_eq!(num_ports, port_ranges.len());
230 for (i, pr) in port_ranges.iter().enumerate() {
231 print_port(p, i, pr, nodes);
232 }
233}Sourcepub fn get(
&self,
subject: Option<&Node>,
predicate: Option<&Node>,
object: Option<&Node>,
) -> Option<Node>
pub fn get( &self, subject: Option<&Node>, predicate: Option<&Node>, object: Option<&Node>, ) -> Option<Node>
Find a single node that matches a pattern. Exactly one of subject, predicate, or
object must be None.