Mercurial > crates > nonstick
comparison src/_doc.rs @ 116:a12706e42c9d
Logging, macros, and building:
- Changes logging API to accept the `Location` of the log statement.
Fixes OpenPAM implementation.
- Stops publicly exporting doc macros.
- Uses dlopen to detect the PAM library rather than header jankery.
| author | Paul Fisher <paul@pfish.zone> |
|---|---|
| date | Sun, 29 Jun 2025 18:27:51 -0400 |
| parents | 49d9e2b5c189 |
| children | 39760dfc9b3b |
comparison
equal
deleted
inserted
replaced
| 115:1e11a52b4665 | 116:a12706e42c9d |
|---|---|
| 4 /// | 4 /// |
| 5 /// Use this with the other doc macros for the correct link names. | 5 /// Use this with the other doc macros for the correct link names. |
| 6 /// | 6 /// |
| 7 /// # Examples | 7 /// # Examples |
| 8 /// | 8 /// |
| 9 /// ``` | 9 /// ```ignore |
| 10 /// # use nonstick::{_linklist, _stdlinks}; | 10 /// # use nonstick::{linklist, stdlinks}; |
| 11 /// /// Here is a list of links: | 11 /// /// Here is a list of links: |
| 12 /// /// | 12 /// /// |
| 13 /// #[doc = _linklist!(pam_get_authtok: man7, manbsd)] | 13 /// #[doc = linklist!(pam_get_authtok: man7, manbsd)] |
| 14 /// /// | 14 /// /// |
| 15 /// /// The links are defined in the `stdlinks!` invocation below: | 15 /// /// The links are defined in the `stdlinks!` invocation below: |
| 16 /// /// | 16 /// /// |
| 17 /// #[doc = _stdlinks!(3 pam_get_authtok)] | 17 /// #[doc = stdlinks!(3 pam_get_authtok)] |
| 18 /// # fn do_whatever() {} | 18 /// # fn do_whatever() {} |
| 19 /// ``` | 19 /// ``` |
| 20 #[macro_export] | 20 macro_rules! linklist { |
| 21 #[doc(hidden)] | |
| 22 macro_rules! _linklist { | |
| 23 ($func:ident: adg$(, $rest:ident)*) => { | 21 ($func:ident: adg$(, $rest:ident)*) => { |
| 24 concat!( | 22 concat!( |
| 25 "- [Application Developers' Guide on `", stringify!($func), "`][adg]\n", | 23 "- [Application Developers' Guide on `", stringify!($func), "`][adg]\n", |
| 26 $crate::_linklist!($func: $($rest),*) | 24 $crate::linklist!($func: $($rest),*) |
| 27 ) | 25 ) |
| 28 }; | 26 }; |
| 29 ($func:ident: mwg$(, $rest:ident)*) => { | 27 ($func:ident: mwg$(, $rest:ident)*) => { |
| 30 concat!( | 28 concat!( |
| 31 "- [Module Writers' Guide on `", stringify!($func), "`][mwg]\n", | 29 "- [Module Writers' Guide on `", stringify!($func), "`][mwg]\n", |
| 32 $crate::_linklist!($func: $($rest),*) | 30 $crate::linklist!($func: $($rest),*) |
| 33 ) | 31 ) |
| 34 }; | 32 }; |
| 35 ($func:ident: _std$(, $rest:ident)*) => { | 33 ($func:ident: _std$(, $rest:ident)*) => { |
| 36 $crate::_linklist!($func: man7, manbsd, xsso$(, $rest)*) | 34 $crate::linklist!($func: man7, manbsd, xsso$(, $rest)*) |
| 37 }; | 35 }; |
| 38 ($func:ident: man7$(, $rest:ident)*) => { | 36 ($func:ident: man7$(, $rest:ident)*) => { |
| 39 concat!( | 37 concat!( |
| 40 "- [Linux-PAM manpage for `", stringify!($func), "`][man7]\n", | 38 "- [Linux-PAM manpage for `", stringify!($func), "`][man7]\n", |
| 41 $crate::_linklist!($func: $($rest),*) | 39 $crate::linklist!($func: $($rest),*) |
| 42 ) | 40 ) |
| 43 }; | 41 }; |
| 44 ($func:ident: manbsd$(, $rest:ident)*) => { | 42 ($func:ident: manbsd$(, $rest:ident)*) => { |
| 45 concat!( | 43 concat!( |
| 46 "- [OpenPAM manpage for `", stringify!($func), "`][manbsd]\n", | 44 "- [OpenPAM manpage for `", stringify!($func), "`][manbsd]\n", |
| 47 $crate::_linklist!($func: $($rest),*) | 45 $crate::linklist!($func: $($rest),*) |
| 48 ) | 46 ) |
| 49 }; | 47 }; |
| 50 ($func:ident: xsso$(, $rest:ident)*) => { | 48 ($func:ident: xsso$(, $rest:ident)*) => { |
| 51 concat!( | 49 concat!( |
| 52 "- [X/SSO spec for `", stringify!($func), "`][xsso]", | 50 "- [X/SSO spec for `", stringify!($func), "`][xsso]", |
| 53 $crate::_linklist!($func: $($rest),*) | 51 $crate::linklist!($func: $($rest),*) |
| 54 ) | 52 ) |
| 55 }; | 53 }; |
| 56 ($func:ident:$(,)?) => { "" }; | 54 ($func:ident:$(,)?) => { "" }; |
| 57 } | 55 } |
| 58 | 56 |
| 59 /// Generates a Markdown link reference to one of the PAM guides. | 57 /// Generates a Markdown link reference to one of the PAM guides. |
| 60 /// | 58 /// |
| 61 /// # Examples | 59 /// # Examples |
| 62 /// | 60 /// |
| 63 /// ``` | 61 /// ```ignore |
| 64 /// # use nonstick::{_guide}; | 62 /// # use nonstick::{guide}; |
| 65 /// /// See [the guide][mwg]. | 63 /// /// See [the guide][mwg]. |
| 66 /// /// | 64 /// /// |
| 67 /// #[doc = _guide!(mwg: "mwg-expected-by-module-item.html#mwg-pam_get_user")] | 65 /// #[doc = guide!(mwg: "mwg-expected-by-module-item.html#mwg-pam_get_user")] |
| 68 /// # fn do_whatever() {} | 66 /// # fn do_whatever() {} |
| 69 /// ``` | 67 /// ``` |
| 70 #[macro_export] | 68 macro_rules! guide { |
| 71 #[doc(hidden)] | |
| 72 macro_rules! _guide { | |
| 73 ($name:ident: $page_link:literal) => { | 69 ($name:ident: $page_link:literal) => { |
| 74 concat!( | 70 concat!( |
| 75 "[", | 71 "[", |
| 76 stringify!($name), | 72 stringify!($name), |
| 77 "]: https://www.chiark.greenend.org.uk/doc/libpam-doc/html/", | 73 "]: https://www.chiark.greenend.org.uk/doc/libpam-doc/html/", |
| 82 | 78 |
| 83 /// Generates a Markdown link reference to the Linux man pages on man7.org. | 79 /// Generates a Markdown link reference to the Linux man pages on man7.org. |
| 84 /// | 80 /// |
| 85 /// # Examples | 81 /// # Examples |
| 86 /// | 82 /// |
| 87 /// ``` | 83 /// ```ignore |
| 88 /// # use nonstick::_man7; | 84 /// # use nonstick::man7; |
| 89 /// /// This contains a [link to the man page for malloc][man7]. | 85 /// /// This contains a [link to the man page for malloc][man7]. |
| 90 /// #[doc = _man7!(3 malloc)] | 86 /// #[doc = man7!(3 malloc)] |
| 91 /// # fn do_whatever() {} | 87 /// # fn do_whatever() {} |
| 92 /// | 88 /// |
| 93 /// /// This contains both a link to the ["structure" section of `hgrc`][man7] | 89 /// /// This contains both a link to the ["structure" section of `hgrc`][man7] |
| 94 /// /// and a link to the ["environment" section of `systemd`][sysd_env]. | 90 /// /// and a link to the ["environment" section of `systemd`][sysd_env]. |
| 95 /// /// | 91 /// /// |
| 96 /// #[doc = _man7!(5 hgrc "STRUCTURE")] | 92 /// #[doc = man7!(5 hgrc "STRUCTURE")] |
| 97 /// #[doc = _man7!(sysd_env: 1 systemd "ENVIRONMENT")] | 93 /// #[doc = man7!(sysd_env: 1 systemd "ENVIRONMENT")] |
| 98 /// # fn do_whatever2() {} | 94 /// # fn do_whatever2() {} |
| 99 /// ``` | 95 /// ``` |
| 100 #[macro_export] | 96 macro_rules! man7 { |
| 101 #[doc(hidden)] | |
| 102 macro_rules! _man7 { | |
| 103 ($n:literal $fn:ident $($anchor:literal)?) => { | 97 ($n:literal $fn:ident $($anchor:literal)?) => { |
| 104 $crate::_man7!(man7: $n $fn $($anchor)?) | 98 $crate::man7!(man7: $n $fn $($anchor)?) |
| 105 }; | 99 }; |
| 106 ($name:ident: $n:literal $fn:ident $($anchor:literal)?) => { | 100 ($name:ident: $n:literal $fn:ident $($anchor:literal)?) => { |
| 107 concat!( | 101 concat!( |
| 108 "[", stringify!($name), "]: ", | 102 "[", stringify!($name), "]: ", |
| 109 "https://man7.org/linux/man-pages/man", $n, "/", | 103 "https://man7.org/linux/man-pages/man", $n, "/", |
| 114 | 108 |
| 115 /// Generates a Markdown link reference to the NetBSD man pages. | 109 /// Generates a Markdown link reference to the NetBSD man pages. |
| 116 /// | 110 /// |
| 117 /// # Examples | 111 /// # Examples |
| 118 /// | 112 /// |
| 119 /// ``` | 113 /// ```ignore |
| 120 /// # use nonstick::_manbsd; | 114 /// # use nonstick::manbsd; |
| 121 /// // Both of these formulations create a link named `manbsd`. | 115 /// // Both of these formulations create a link named `manbsd`. |
| 122 /// #[doc = _manbsd!(3 fn_name)] | 116 /// #[doc = manbsd!(3 fn_name)] |
| 123 /// #[doc = _manbsd!(5 thing_name "SECTION")] | 117 /// #[doc = manbsd!(5 thing_name "SECTION")] |
| 124 /// // This one creates a link named `link_name`. | 118 /// // This one creates a link named `link_name`. |
| 125 /// #[doc = _manbsd!(link_name: 1 prog_name "SECTION")] | 119 /// #[doc = manbsd!(link_name: 1 prog_name "SECTION")] |
| 126 /// # fn do_whatever() {} | 120 /// # fn do_whatever() {} |
| 127 /// ``` | 121 /// ``` |
| 128 #[macro_export] | 122 macro_rules! manbsd { |
| 129 #[doc(hidden)] | |
| 130 macro_rules! _manbsd { | |
| 131 ($n:literal $func:ident $($anchor:literal)?) => { | 123 ($n:literal $func:ident $($anchor:literal)?) => { |
| 132 $crate::_manbsd!(manbsd: $n $func $($anchor)?) | 124 $crate::manbsd!(manbsd: $n $func $($anchor)?) |
| 133 }; | 125 }; |
| 134 ($name:ident: $n:literal $func:ident $($anchor:literal)?) => { | 126 ($name:ident: $n:literal $func:ident $($anchor:literal)?) => { |
| 135 concat!("[", stringify!($name), "]: ", | 127 concat!("[", stringify!($name), "]: ", |
| 136 "https://man.netbsd.org/", stringify!($func), ".", $n, | 128 "https://man.netbsd.org/", stringify!($func), ".", $n, |
| 137 $("#", $anchor)? | 129 $("#", $anchor)? |
| 141 | 133 |
| 142 /// Generates a Markdown link reference to the X/SSO specification. | 134 /// Generates a Markdown link reference to the X/SSO specification. |
| 143 /// | 135 /// |
| 144 /// # Examples | 136 /// # Examples |
| 145 /// | 137 /// |
| 146 /// ``` | 138 /// ```ignore |
| 147 /// # use nonstick::_xsso; | 139 /// # use nonstick::xsso; |
| 148 /// /// This docstring will [link to the X/SSO spec for `pam_set_item`][xsso]. | 140 /// /// This docstring will [link to the X/SSO spec for `pam_set_item`][xsso]. |
| 149 /// /// | 141 /// /// |
| 150 /// #[doc = _xsso!(pam_set_item)] | 142 /// #[doc = xsso!(pam_set_item)] |
| 151 /// # fn link_one() {} | 143 /// # fn link_one() {} |
| 152 /// | 144 /// |
| 153 /// /// This docstring will link to [`some_page`][xsso]. | 145 /// /// This docstring will link to [`some_page`][xsso]. |
| 154 /// /// I can also link to [the table of contents][spec_toc]. | 146 /// /// I can also link to [the table of contents][spec_toc]. |
| 155 /// /// | 147 /// /// |
| 156 /// #[doc = _xsso!("some_page.htm#section-id")] | 148 /// #[doc = xsso!("some_page.htm#section-id")] |
| 157 /// #[doc = _xsso!(spec_toc: "toc.htm")] | 149 /// #[doc = xsso!(spec_toc: "toc.htm")] |
| 158 /// # fn do_whatever() {} | 150 /// # fn do_whatever() {} |
| 159 /// ``` | 151 /// ``` |
| 160 #[macro_export] | 152 macro_rules! xsso { |
| 161 #[doc(hidden)] | 153 ($func:ident) => { $crate::xsso!(xsso: concat!(stringify!($func), ".htm")) }; |
| 162 macro_rules! _xsso { | 154 ($page:literal) => { $crate::xsso!(xsso: $page) }; |
| 163 ($func:ident) => { $crate::_xsso!(xsso: concat!(stringify!($func), ".htm")) }; | |
| 164 ($page:literal) => { $crate::_xsso!(xsso: $page) }; | |
| 165 ($name:ident: $page:expr) => { | 155 ($name:ident: $page:expr) => { |
| 166 concat!("[", stringify!($name), "]: https://pubs.opengroup.org/onlinepubs/8329799/", $page) | 156 concat!("[", stringify!($name), "]: https://pubs.opengroup.org/onlinepubs/8329799/", $page) |
| 167 }; | 157 }; |
| 168 } | 158 } |
| 169 | 159 |
| 170 /// Generates Markdown link references to Linux-PAM, OpenPAM, and X/SSO. | 160 /// Generates Markdown link references to Linux-PAM, OpenPAM, and X/SSO. |
| 171 /// | 161 /// |
| 172 /// A shortcut to `_man7!`, `_manbsd!`, and `_xsso!`. | 162 /// A shortcut to `man7!`, `manbsd!`, and `xsso!`. |
| 173 /// | 163 /// |
| 174 /// # Examples | 164 /// # Examples |
| 175 /// | 165 /// |
| 176 /// ``` | 166 /// ```ignore |
| 177 /// # use nonstick::_stdlinks; | 167 /// # use nonstick::stdlinks; |
| 178 /// /// Check out [this][man7], [that][manbsd], or [the other][xsso]. | 168 /// /// Check out [this][man7], [that][manbsd], or [the other][xsso]. |
| 179 /// /// | 169 /// /// |
| 180 /// #[doc = _stdlinks!(3 pam_get_item)] | 170 /// #[doc = stdlinks!(3 pam_get_item)] |
| 181 /// # fn do_whatever() {} | 171 /// # fn do_whatever() {} |
| 182 /// ``` | 172 /// ``` |
| 183 #[macro_export] | 173 macro_rules! stdlinks { |
| 184 #[doc(hidden)] | |
| 185 macro_rules! _stdlinks { | |
| 186 ($n:literal $func:ident) => { | 174 ($n:literal $func:ident) => { |
| 187 concat!($crate::_man7!($n $func), "\n", $crate::_manbsd!($n $func), "\n", $crate::_xsso!($func)) | 175 concat!($crate::man7!($n $func), "\n", $crate::manbsd!($n $func), "\n", $crate::xsso!($func)) |
| 188 }; | 176 }; |
| 189 } | 177 } |
| 178 | |
| 179 pub(crate) use {linklist, guide, man7, manbsd, xsso, stdlinks}; |
