') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); der: use type's tag by default on derive(Choice) by npmccallum · Pull Request #416 · RustCrypto/formats · GitHub
Skip to content

der: use type's tag by default on derive(Choice) - #416

Merged
tarcieri merged 1 commit into
RustCrypto:masterfrom
npmccallum:seqdef
Feb 11, 2022
Merged

der: use type's tag by default on derive(Choice)#416
tarcieri merged 1 commit into
RustCrypto:masterfrom
npmccallum:seqdef

Conversation

@npmccallum

@npmccallumnpmccallum commented Feb 11, 2022

Copy link
Copy Markdown
Contributor

By default, presume that a choice enum's type implements FixedTag. For
many cases, this means that no #[asn1(...)] is required at all. In
particular, this means that deriving Choice for SEQUENCE types
without a context-specific tag is now possible.

Signed-off-by: Nathaniel McCallum nathaniel@profian.com

@npmccallumnpmccallum mentioned this pull request Feb 11, 2022
5 tasks
@tarcieri

Copy link
Copy Markdown
Member

I think the Choice macro could benefit from a change like this, but I'm not sure making SEQUENCE the implicit default is actually the best fix here.

Instead, I think it would make sense to avoid making any presumptions about the ASN.1 type, but try to treat it as if it impls Decode + FixedTag at decoding time, and Encode + Tagged at encoding time, and use that to either infer or query the appropriate tag for decoding/encoding.

@npmccallumnpmccallum changed the title der: default to SEQUENCE tags in derive(Choice)der: use type's tag by default on derive(Choice)Feb 11, 2022
@npmccallum

Copy link
Copy Markdown
ContributorAuthor

@tarcieri I believe the latest version of this fixes your concerns.

Comment threadder/derive/src/choice/variant.rs Outdated

@tarcieritarcieri left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@npmccallum looks better now!

One suggestion

By default, presume that a choice enum's type implements FixedTag. For
many cases, this means that no `#[asn1(...)]` is required at all. In
particular, this means that deriving `Choice` for `SEQUENCE` types
without a context-specific tag is now possible.
Signed-off-by: Nathaniel McCallum <nathaniel@profian.com>
@tarcieri
tarcieri merged commit b51d331 into RustCrypto:masterFeb 11, 2022
@npmccallum
npmccallum deleted the seqdef branch March 10, 2022 20:46
@tarcieritarcieri mentioned this pull request May 8, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@npmccallum@tarcieri