gdnative_doc/backend/
callbacks.rs1use std::collections::HashMap;
2
3use super::{Generator, Resolver};
4use crate::documentation::{Method, Property};
5use pulldown_cmark::{CowStr, Event, HeadingLevel, Tag};
6
7pub trait Callbacks {
11 fn extension(&self) -> &'static str;
13 fn generate_files(&mut self, generator: Generator) -> HashMap<String, String>;
21 fn start_method(&mut self, _s: &mut String, _resolver: &Resolver, _method: &Method) {}
25 fn start_property(&mut self, _s: &mut String, _resolver: &Resolver, _property: &Property) {}
29 fn encode(&mut self, s: &mut String, events: Vec<Event<'_>>);
31}
32
33impl dyn Callbacks {
34 pub fn start_method_default(&mut self, s: &mut String, property: &Resolver, method: &Method) {
45 let link = &format!("<a id=\"func-{}\"></a>", method.name);
46 self.encode(
47 s,
48 vec![
49 Event::Start(Tag::Heading(HeadingLevel::H3, None, Vec::new())),
50 Event::Html(CowStr::Borrowed(link)),
51 ],
52 );
53 let mut method_header = String::from("func ");
54 method_header.push_str(&method.name);
55 method_header.push('(');
56 for (index, (name, typ, _)) in method.parameters.iter().enumerate() {
57 method_header.push_str(name);
58 method_header.push_str(": ");
59 self.encode(s, vec![Event::Text(CowStr::Borrowed(&method_header))]);
60 method_header.clear();
61 self.encode(s, property.encode_type(typ));
62 if index + 1 != method.parameters.len() {
63 method_header.push_str(", ");
64 }
65 }
66 method_header.push_str(") -> ");
67 let mut last_events = vec![Event::Text(CowStr::Borrowed(&method_header))];
68 last_events.extend(property.encode_type(&method.return_type));
69 last_events.push(Event::End(Tag::Heading(HeadingLevel::H3, None, Vec::new())));
70 last_events.push(Event::Rule);
71 self.encode(s, last_events);
72 }
73
74 pub fn start_property_default(
85 &mut self,
86 s: &mut String,
87 resolver: &Resolver,
88 property: &Property,
89 ) {
90 let link = &format!(
91 "<a id=\"property-{}\"></a> {}: ",
92 property.name, property.name
93 );
94 self.encode(
95 s,
96 vec![
97 Event::Start(Tag::Heading(HeadingLevel::H3, None, Vec::new())),
98 Event::Html(CowStr::Borrowed(link)),
99 ],
100 );
101 let mut last_events = resolver.encode_type(&property.typ);
102 last_events.push(Event::End(Tag::Heading(HeadingLevel::H3, None, Vec::new())));
103 last_events.push(Event::Rule);
104 self.encode(s, last_events);
105 }
106}
107
108impl std::fmt::Debug for dyn Callbacks {
109 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
110 formatter.write_str("Callbacks")
111 }
112}